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