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

Rob*_*oss 6 ruby rspec ruby-on-rails

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

谢谢!

DVG*_*DVG 16

rails g integration_test foo
Run Code Online (Sandbox Code Playgroud)

你很高兴去!


prc*_*rcu 6

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

# 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
Run Code Online (Sandbox Code Playgroud)

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

使用rails 5.0.1进行测试.


Ren*_*nra 0

我认为你实际上无法配置它,但你总是可以分叉 rspec-rails 并根据你的喜好调整它https://github.com/rspec/rspec-rails/blob/master/lib/generators/rspec/controller/控制器生成器.rb

祝你好运!