在集成测试中使用命名路由是否合适?
其中哪一个是编写集成(请求)测试的“正确”方法。
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
about_terms_path
是正确的,因为自定义路径路径可能在路径文件中更改,但路径的名称应保持不变。
前者会导致脆弱的测试。
如果路由的名称发生了变化,那么Rails应用程序中对该路由的所有引用都需要更改,因此您的rspec测试也是如此。
如果路径的路径发生变化,则Rails应用程序或rspec测试中的任何内容都不需要更改。
编辑:
如果您想测试路线,请查看https://www.relishapp.com/rspec/rspec-rails/docs/routing-specs
我会说两者都没关系,我个人更喜欢第一个。
整合测试是模仿人的眼睛和行动。 人类可以看到“/ about / terms”,但不能看到“about_term_path”。
另外,有两点建议:
-
最好使用Capybara,允许使用Javascript的Web驱动程序。 这样,“get”将无效,相反,使用“visit”
-
无需在集成测试中检查响应,这是function测试(控制器)的工作。 直接转到真实点。
加
回答杰森的问题。 是的,我总是在集成测试中使用硬编码路由,非常一致。
原因是从外到内的方法 ,这是验收测试驱动开发的关键点。 当我编写集成测试时,我不知道命名路由,因为routes.rb尚未修改。 或者我应该知道,但那时我并不关心它。
当rspec告诉我“没有匹配的路线”时,我说,很好,让我生成控制器并检查routes.rb。
- Rails在哪里存储通过在测试期间保存activerecord对象而创建的数据?
- FactoryGirl创建了不完整的模型
- 如何测试ActiveRecord中哪些validation失败?
- Factory Girl + Rspec给出以下错误:ActionView :: Template :: Error :(对象id)不是id值
- 如何在capybara中使用execute_script时返回值?
- 个别规格在单独运行时通过,但在运行所有规格时失败
- 在RSpec中记录RestClient响应
- rails rspec – (第二次测试)预期响应是,但是
- RSpec与Cookies – 即使应用程序正常工作(模拟已登录的用户),测试也会失败