ruby on rails 3-如何使用rspec生成控制器规范



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

谢谢!

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

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

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

require 'rails_helper'
describe NewControllerName do
  # Test!
end

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

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

考虑以下内容:

rails g rspec:controller fruits

在Rails5之前,你会得到一个文件,比如:

spec/controllers/fruits_controller_spec.rb

使用Rails5,您会得到如下文件:

spec/requests/fruits_request_spec.rb

RSpec 3.5发行说明对此有更多说明:

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

希望这能帮助那些路过的人,因为他们正试图弄清楚Rails为什么没有制定控制器规格

相关内容

  • 没有找到相关文章

最新更新