我在我的application_controller中使用:.consider_all_requests_local
就像
unless Rails.application.config.consider_all_requests_local
rescue_from ActionController::InvalidCrossOriginRequest, :with => :render_404
end
如果引发 ActionController::InvalidCrossOriginRequest,则返回 404。在本地环境中它不会被引发,这有利于调试。 对于这部分来说,它正在工作。但我想用 rspec 来测试它。
我尝试过类似的方法
describe 'ActionController::InvalidCrossOriginRequest render 404' do
before { Rails.application.config.consider_all_requests_local = false }
controller do
def index
raise ActionController::InvalidCrossOriginRequest
end
end
subject { xhr :get, :index, format: :js }
its(:status) { is_expected.to eq 404 }
end
有两件事。我可能没有以正确的方式加注。在本地调用 mywebsite.com/editor/fckeditor.js 时会发生错误。没有找到调用特定网址的方法。
第二个问题,之前不会更改Rails.application.config.consider_all_requests_local
状态。
我明白了:
1) ApplicationController ActionController::InvalidCrossOriginRequest render 404 status
Failure/Error: raise ActionController::InvalidCrossOriginRequest
ActionController::InvalidCrossOriginRequest:
ActionController::InvalidCrossOriginRequest
最佳答案
该问题看起来是由您的除非
在类加载时执行检查引起的。这意味着第一次加载类时,会检查应用程序配置中的值,并且设置或不设置 rescue_from
。
在最基本的解决方法中,您需要使用 load
来在设置更改后重新读取该文件。但是,实际上,一旦打开 rescue_from
,再次加载文件不会导致其关闭。
下一个替代方案是使用 rescue_from(with:)
委托(delegate)给助手或 the block form 。您可以使用此助手来检查该值并处理或不处理该条件。但是,考虑到这看起来只是您只想在非生产环境中执行的操作,您可以将两者结合起来。使用 unless
验证您不在生产环境中,然后每次使用 with 检查配置。
类似于:
class ApplicationController < ActionController::Base
unless Rails.env.production?
rescue_from ActionController::InvalidCrossOriginRequest do
unless Rails.application.config.consider_all_requests_local
render_404
end
end
end
end
关于ruby-on-rails - 使用 rspec 进行测试 .consider_all_requests_local = false,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31110347/