gpt4 book ai didi

ruby-on-rails - 使用 rspec .consider_all_requests_local = false 进行测试

转载 作者:太空宇宙 更新时间:2023-11-03 18:12:52 24 4
gpt4 key购买 nike

我在我的application_controller 中使用:.consider_all_requests_local like

  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 时会发生错误。没有找到调用特定 url 的方法。

第二个问题,之前 不会更改 Rails.application.config.consider_all_requests_local 状态。

我得到:

1) ApplicationController ActionController::InvalidCrossOriginRequest render 404 status
Failure/Error: raise ActionController::InvalidCrossOriginRequest
ActionController::InvalidCrossOriginRequest:
ActionController::InvalidCrossOriginRequest

最佳答案

问题看起来是由您的 unless 检查在类加载时执行引起的。这意味着第一次加载该类时,将检查应用程序配置中的值,并设置或不设置 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com