初学 Rails,关于测试代码我有如下了解: Rails 中大概分为了对 model、controllers、integration 和 system 的测试。
ModelTest 直接继承 ActiveSupport::TestCase,model 的测试不涉及 server,只是利用 orm 框架对 model 的完整性和正确性做测试; 在 Rails5 之前,ControllerTest 继承的是 ActionContollersTest,而目前 ControllerTest 和 IntegrationTest 都是继承 ActionDispatch::IntegrationTest, 所以 controllers 是对 server 接口的测试,是从 server 系统 外部 来看待并测试 server,算是黑盒测试,不能审视 server 内部状体比如 session 的变化; integration 是对用户使用的重要流程,或者涉及接口的依赖的测试,也是黑盒测试; system 测试是完全模拟用户打开浏览器看到的样子,来进行测试,也是黑盒测试
从上面来看,我的最大疑问是,Controller 和 Integration 都是黑盒测试,没办法观察系统内部状态并断言,Rails 中是不是有相关机制能办到呢?或者说 Rails 中不建议这样做,那么理由又是啥呢?
ref: rails5 can't access session in ActionDispatch::IntegrationTest https://github.com/rails/rails/issues/23386