Rails rspec控制器测试与集成测试

时间:2013-02-04 22:00:33

标签: functional-testing rspec-rails

我刚刚完成了为Rails应用程序编写详细的rspec capybara集成和单元测试,其中包括模拟Omniauth(twitter)登录,填写表单,数据验证等。但是,我想知道是否需要编写一个单独的控制器或功能测试。

非常感谢您的意见和任何进一步阅读的链接等。

2 个答案:

答案 0 :(得分:10)

我会在这里扮演魔鬼的拥护者,因为我知道我可能是这个观点的少数人:我实际上更喜欢做极其彻底的控制器测试。原因如下:

1)我发现在控制器级别比在集成测试级别更系统地测试每个路径和结果。我的集成测试主要是happy-paths和一些更常见的错误路径。

2)在控制器级别发生了许多潜在的安全问题。彻底的测试可以帮助我确保没有任何恶意软件可以通过我的模型逻辑。

3)这是主观的,但它确实迫使我思考我的应用程序可能经历的一些长尾路径。如果有人试图将无效密码重置令牌放入URL,该怎么办?控制器测试确保我考虑所有选项。

4)与集成测试不同,它们是相当直接的测试。每个动作都只是一种红宝石方法!

答案 1 :(得分:6)

就个人而言,我认为如果您的请求(集成)规范正在执行您所涵盖的所有代码路径。 Ryan Bates有一个很好的Railscast关于他如何在这里测试:http://railscasts.com/episodes/275-how-i-test?autoplay=true和大约5:05他说类似的事情。像你一样,我喜欢编写集成测试而不是控制器规范。大多数时间控制器无论如何都只是前面的CRUD类型操作(特别是如果你小心保持域逻辑不在控制器之外),所以你所测试的就是脚手架。