【发布时间】:2013-02-04 22:00:33
【问题描述】:
我刚刚完成了为 Rails 应用程序编写详细的 rspec capybara 集成和单元测试,其中包括模拟 Omniauth (twitter) 登录、填写表单、数据验证等。但是,我想知道是否需要编写一个单独的控制器或功能测试。
非常感谢您的意见以及任何指向进一步阅读等的链接。
【问题讨论】:
标签: functional-testing rspec-rails
我刚刚完成了为 Rails 应用程序编写详细的 rspec capybara 集成和单元测试,其中包括模拟 Omniauth (twitter) 登录、填写表单、数据验证等。但是,我想知道是否需要编写一个单独的控制器或功能测试。
非常感谢您的意见以及任何指向进一步阅读等的链接。
【问题讨论】:
标签: functional-testing rspec-rails
我将在这里扮演魔鬼的拥护者,因为我知道我可能是少数持有这种观点的人:我实际上更喜欢进行非常彻底的控制器测试。几个原因:
1) 我发现在控制器级别系统地测试每条路径和结果比在集成测试级别更容易。我的集成测试主要是快乐路径,以及一些更常见的错误路径。
2) 许多潜在的安全问题发生在控制器级别。彻底的测试帮助我确保没有任何恶意可以通过我的模型逻辑。
3) 这是主观的,但它确实迫使我考虑我的应用程序可能经历的一些长尾路径。如果有人试图在 URL 中输入无效的密码重置令牌怎么办?控制器测试确保我考虑所有选项。
4) 与集成测试不同,它们的测试相当简单。每个动作只是一个红宝石方法!
【讨论】:
就个人而言,我认为如果您的请求(集成)规范正在执行您所涵盖的所有代码路径。 Ryan Bates 有一个很棒的 Railscast 关于他如何在这里测试:http://railscasts.com/episodes/275-how-i-test?autoplay=true 和大约 5:05 他说了类似的话。和你一样,我喜欢编写集成测试而不是控制器规范。大多数时候,控制器只是简单地前置 CRUD 类型的操作(特别是如果您小心地将域逻辑排除在控制器之外),因此您要测试的只是脚手架。
【讨论】: