如何使用 rspec 生成控制器规范?

Posted

技术标签:

【中文标题】如何使用 rspec 生成控制器规范?【英文标题】:How do I generate a controller spec using rspec? 【发布时间】:2011-06-07 21:44:58 【问题描述】:

我正在将 devise_invitable 集成到我的应用程序中,我必须编写一个自定义控制器 - InvitationsController - 来覆盖 gem 中的一些方法。现在,我想编写测试来涵盖我所做的事情,但我不知道如何为新控制器生成规范。任何帮助将不胜感激。

谢谢!

【问题讨论】:

对于具有预定义规范的规范文件,您可以在另一个问题 ***.com/a/30808557/895789 中查看我的答案 【参考方案1】:

rspec 方式是

rails g rspec:controller passwords

它给了

create  spec/controllers/passwords_controller_spec.rb

--更新

您可以将应用程序配置为在创建模型或控制器时生成 rspec。 添加到 config/application.rb

# don't generate RSpec tests for views and helpers.
config.generators do |g|
  g.test_framework :rspec, fixture: true
  g.fixture_replacement :factory_girl, dir: 'spec/factories' 

  g.view_specs false
  g.helper_specs false
end

$rails g model category
  invoke  mongoid
  create    app/models/category.rb
  invoke    rspec
  create      spec/models/category_spec.rb
  invoke      factory_girl
  create        spec/factories/categories.rb
$rails g controller categories
  create  app/controllers/categories_controller.rb
  invoke  haml
  create    app/views/categories
  invoke  rspec
  create    spec/controllers/categories_controller_spec.rb
  invoke  helper
  create    app/helpers/categories_helper.rb
  invoke    rspec
  invoke  assets
  invoke    coffee
  create      app/assets/javascripts/categories.js.coffee
  invoke    scss
  create      app/assets/stylesheets/categories.css.scss

【讨论】:

谢谢,很有帮助!【参考方案2】:

如果您使用 Rails 3 + rspec 并且安装了 rspec (rails g rspec:install),它应该为您生成的每个控制器(和其他对象)生成控制器规范。

如果您需要手动创建一个。只需在您的spec/controllers 中创建一个新的new_controller_name_spec.rb

require 'rails_helper'

describe NewControllerName do
  # Test!
end

您也可以尝试重新生成控制器文件,当它询问您是否要覆盖现有控制器时说 No,并希望它会再次为该控制器重新生成 rspec。

【讨论】:

【参考方案3】:

从 Rails 5 和 RSpec 3.5 开始,控制器规范文件不再是推荐的方法,而是 RSpec 创建称为请求的文件。这些文件通过测试对给定 URL 发出请求时发生的情况来测试控制器的输出。

考虑以下几点:

rails g rspec:controller fruits

Pre-Rails 5 你会得到一个类似的文件:

spec/controllers/fruits_controller_spec.rb

使用 Rails 5 你会得到一个类似的文件:

spec/requests/fruits_request_spec.rb

RSpec 3.5 release notes 对此有更多话要说:

Rails 团队和 RSpec 核心团队的官方建议是改为编写请求规范。请求规范允许您专注于单个控制器操作,但与控制器测试不同的是,它涉及路由器、中间件堆栈以及机架请求和响应。这增加了您正在编写的测试的真实性,并有助于避免控制器规范中常见的许多问题。

希望这可以帮助那些因为试图弄清楚 Rails 没有制定控制器规范的原因而停下来的人!

【讨论】:

以上是关于如何使用 rspec 生成控制器规范?的主要内容,如果未能解决你的问题,请参考以下文章

如何从脚手架完成 rspec put 控制器测试

什么被认为是一个很好的规范? Rspec初学者的例子

如何在 rspec 中使用 capybara 点击下拉选项

RSpec vs Cucumber(RSpec 故事)[关闭]

如何在RSpec中使用终端的单一命令运行多个规格文件?

如何在 Capybara 和 RSpec 中测试 CSV 文件下载?