其中哪一种是编写集成(请求)测试的“正确”方法。
it "should be successful" do
get "/about/terms"
response.should be_success
end
it "should be successful" do
get about_terms_path
response.should be_success
end
答案 0 :(得分:4)
about_terms_path
是正确的,因为自定义路径路径可能会在路径文件中更改,但路径名称应保持不变。
前者会导致脆弱的测试。
如果路线的名称发生了变化,那么Rails应用程序中对该路线的所有引用都需要更改,因此您的rspec测试也会发生变化。
如果路径的路径发生变化,则Rails应用程序或rspec测试中的任何内容都不需要更改。
修改强>
如果您想测试路线,请查看https://www.relishapp.com/rspec/rspec-rails/docs/routing-specs
答案 1 :(得分:2)
我会说两者都没关系,我个人更喜欢第一个。
整合测试是模仿人的眼睛和行动。人类可以看到“/ about / terms”,但不能看到“about_term_path”。
此外,还有两点建议:
最好使用Capybara,允许使用Javascript进行网页驱动。这样,“get”将无法使用,而是使用“visit”
无需检查集成测试中的响应,这是功能测试(控制器)的工作。直接转到真实点。
添加强>
回答杰森的问题。是的,我总是在集成测试中使用硬编码路由,非常一致。
原因是从外到内的方法,这是验收测试驱动开发的关键点。当我编写集成测试时,我不知道命名路由,因为routes.rb尚未修改。或者我应该知道,但那时我并不关心。
当rspec告诉我“没有匹配的路线”时,我说,很好,让我生成控制器并检查routes.rb。