我正在开发一个rails API,我现在正计划为控制器编写一些RSpec测试。 我一直在阅读,我无法弄清楚控制器规格和请求规格之间的实际区别是什么,以及我在测试API时应该使用哪一个。
答案 0 :(得分:16)
事实上,RSpec团队正式声明控制器规格现已过时。
对于新的Rails应用:我们不建议添加 rails-controller-testing gem到您的应用程序。官方 Rails团队和RSpec核心团队的建议就是写 请求规格。请求规范允许您专注于单个 控制器动作,但不像控制器测试涉及路由器, 中间件堆栈,以及机架请求和响应。这增加了 对你正在编写的考验的现实主义,并帮助避免许多 控制器规范中常见的问题。在Rails 5中,请求规范 比任何一个请求或控制器规格要快得多 在rails 4中,感谢Rails的Eileen Uchitelle1的工作 提交者团队。
答案 1 :(得分:12)
控制器规范 - 控制器规范是Rails功能测试的RSpec包装器。它允许您在每个示例中模拟单个http请求,然后 指定预期结果
请求规范 - 请求规范为Rails的集成测试提供了一个薄的包装器,并且 旨在通过完整堆栈驱动行为,包括路由 (由Rails提供)并且没有存根(这取决于你)。
因此,如果您想测试API控制器,我建议您在测试单个请求时使用Controller specs
。
答案 2 :(得分:8)
引用亚伦·萨姆纳:
Rails和RSpec团队都建议更换或删除你的 应用程序的控制器测试(也称为功能测试层),in 支持直接测试模型(单位),或更高级别 集成测试。
对于新的API,我更喜欢使用请求规范并点击我的"端点" (比较模型和业务逻辑)比使用控制器测试。