RSpec生成请求规范而不是控制器规范

时间:2012-05-25 20:04:26

标签: ruby-on-rails ruby rspec

我正在使用rspec-rails,但我想在调用rails g controller Blahs时更改,我想要创建spec / requests /,而不是spec / controllers /。

谢谢!

4 个答案:

答案 0 :(得分:13)

rails g integration_test foo

你很高兴去吧!

答案 1 :(得分:5)

似乎没有通常的方法来实现这一点,但我找到了猴子修补解决方案:

# config/initializers/generators.rb
Rails.application.configure do
  config.generators do |g|
    # your setup here, like g.javascripts = false
  end

  def self.load_generators(*)
    super
    require 'rails/generators/rails/controller/controller_generator'
    Rails::Generators::ControllerGenerator.class_eval do
      remove_hook_for :test_framework
      hook_for :test_framework, as: :request
    end
  end
end

以下是一些解释:测试框架的hook在ControllerGenerator中设置正确,因此我们需要加载类来覆盖该值。除了运行生成器之外,我不想在任何情况下加载此类。 config.generators块也运行控制台和服务器,所以它不合适。还有self.generators块,但它在config.generators之前运行,并且不会配置生成器。所以我找到了适合我的Engine#load_generators方法。

使用rails 5.0.1进行测试。

答案 2 :(得分:0)

我认为你实际上并不能配置这个,但是你总是可以根据自己的喜好调整rspec-rails并调整它https://github.com/rspec/rspec-rails/blob/master/lib/generators/rspec/controller/controller_generator.rb

祝你好运!

答案 3 :(得分:0)

有一个RSpec生成器可以生成请求规范:

rails g rspec:request Foo

请注意,要启用RSpec生成器,您需要在application.rb中放置以下代码:

class Application < Rails::Application
  ...
  config.generators do |g|
    g.test_framework :rspec
  end
end