以前的项目 generate 生成的控制器测试类都是继承ActionController::TestCase
类,在 Rails5 中改成继承ActionDispatch::IntegrationTest
类了,也就是集成测试和控制器测试已经没有区别,只是放的文件夹不同了。
这样,以前的控制器测试里,直接对 Action 的测试,现在有点变扭,下面是具体代码:
test 'index action in StaticsController'
get :index # 之前
# get statics_index_path # Rails5用法,现在要指定到该方法的路径,也就是测试类下的get/post/...等方法不再特殊,与普通方法一致
# assert...
end
这样控制器测试在修改 Route,假设 statics_index_path 改成 root_path 或 index_path 后,测试就不能通过了。
的确ActionController::TestCase
类重载的 http 方法 (get/post/...) 有时会让人产生费解,但不能否认,还是挺好用的!
最后,问问大家: