控制器规格与请求规格?

时间:2016-11-28 19:10:44

标签: ruby-on-rails rspec rails-api

我正在开发一个rails API,我现在正计划为控制器编写一些RSpec测试。 我一直在阅读,我无法弄清楚控制器规格和请求规格之间的实际区别是什么,以及我在测试API时应该使用哪一个。

3 个答案:

答案 0 :(得分:16)

事实上,RSpec团队正式声明控制器规格现已过时

here

  

对于新的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,我更喜欢使用请求规范并点击我的"端点" (比较模型和业务逻辑)比使用控制器测试。