为什么think_all_requests_local使用rspec配置失败

Pio*_*ior 11 rspec ruby-on-rails-3

rspec-rails(2.7.0)rails(3.0.10)post:Rails 3.1错误捕获对我来说无关紧要.

码:

class ApplicationController < ActionController::Base
  unless Rails.application.config.consider_all_requests_local
    rescue_from ActiveRecord::RecordNotFound, :with => :render_404
    rescue_from Exception, :with => :render_500
    rescue_from FunnyException, :with => :my_errors

    def my_errors(exception)
      #some stuff for production
      puts "=======From top====#{Rails.application.config.consider_all_requests_local}"
    end
  else
    rescue_from FunnyException, :with => :my_errors
    def my_errors(exception)
      #some stuff for development
      puts "=====From bottom======#{Rails.application.config.consider_all_requests_local}"
    end
  end
end
Run Code Online (Sandbox Code Playgroud)

这段代码非常适合生产/开发......当我想用rspec测试它时,问题就出现了.如何在环境之间切换测试用例?

我尝试添加类似的东西:

before do
  Rails.application.config.consider_all_requests_local = true
end
Run Code Online (Sandbox Code Playgroud)

我明白了:

... =====从底部开始====== true.=====从底部开始====== true.=====从底部开始====== true.== ===从底部======是的

好想的

before do
  Rails.application.config.consider_all_requests_local = false
end
Run Code Online (Sandbox Code Playgroud)

所以我得到:

... =====从底部开始====== false.=====从底部开始====== false.=====从底部开始====== false.== ===从底部====== false

这怎么可能呢?...与更改spec_helper相同

config.before(:each) do
  Rails.application.config.consider_all_requests_local = false
end
Run Code Online (Sandbox Code Playgroud)

除非不起作用.顶部是无法访问rspec ...总是点击底部为什么?我认为它现在以某种方式与Rack绑定...但是有没有任何解决方案可以在rspec中动态改变这种行为?

问候

Pio*_*ior 22

好的,我发现很容易解决

before do
  Rails.application.config.consider_all_requests_local = false
  load "application_controller.rb"
end

after do
  Rails.application.config.consider_all_requests_local = true
  load "application_controller.rb"
end
Run Code Online (Sandbox Code Playgroud)

它是匿名应用程序控制器测试套件的一部分.

您必须在块之后添加...因为此更改将通过其他套件保留.

欢迎任何改进:D

编辑:使用spork和guard导致我有时候随机错误......之前:所有似乎都解决了这个问题

  • 我不确定我的情况是否相同,但我不得不在前面的块中添加:`Rails.application.config.action_dispatch.show_exceptions = true`.并且``=假'到后. (5认同)
  • 当我使用`rake spec`运行完整套件时,我失败了.它只在我运行特定的`feature`规范时才通过. (3认同)
  • 为什么这里使用 `load "application_controller.rb"` ? (3认同)