<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>alpha0x00</title>
    <link>https://ruby-china.org/alpha0x00</link>
    <description></description>
    <language>en-us</language>
    <item>
      <title>Rails 中对 Controllers 的测试如何断言 controller 内部状态？</title>
      <description>&lt;p&gt;初学 Rails，关于测试代码我有如下了解：
Rails 中大概分为了对 model、controllers、integration 和 system 的测试。&lt;/p&gt;

&lt;p&gt;ModelTest 直接继承 ActiveSupport::TestCase，model 的测试不涉及 server，只是利用 orm 框架对 model 的完整性和正确性做测试；
在 Rails5 之前，ControllerTest 继承的是 ActionContollersTest，而目前 ControllerTest 和 IntegrationTest 都是继承 ActionDispatch::IntegrationTest，
所以 controllers 是对 server 接口的测试，是从 server 系统 &lt;strong&gt;外部&lt;/strong&gt; 来看待并测试 server，算是&lt;strong&gt;黑盒&lt;/strong&gt;测试，不能审视 server 内部状体比如 session 的变化；
integration 是对用户使用的重要流程，或者涉及接口的依赖的测试，也是黑盒测试；
system 测试是完全模拟用户打开浏览器看到的样子，来进行测试，也是黑盒测试&lt;/p&gt;

&lt;p&gt;从上面来看，我的最大疑问是，Controller 和 Integration 都是黑盒测试，没办法观察系统内部状态并断言，Rails 中是不是有相关机制能办到呢？或者说 Rails 中不建议这样做，那么理由又是啥呢？&lt;/p&gt;

&lt;p&gt;ref：
rails5 can't access session in ActionDispatch::IntegrationTest &lt;a href="https://github.com/rails/rails/issues/23386" rel="nofollow" target="_blank"&gt;https://github.com/rails/rails/issues/23386&lt;/a&gt;&lt;/p&gt;</description>
      <author>alpha0x00</author>
      <pubDate>Sun, 12 Nov 2023 14:20:15 +0800</pubDate>
      <link>https://ruby-china.org/topics/43470</link>
      <guid>https://ruby-china.org/topics/43470</guid>
    </item>
  </channel>
</rss>
