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

标签 ruby-on-rails ruby rspec tdd rspec-rails

我在我的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/

相关文章:

javascript - RSpec 和 Capybara : How to get the horizontal and vertical position of an element

ruby-on-rails - Rspec:在 expect .to eq 语句中使用 OR

mysql - 在 SQLite (RoR) 上使用 mySQL 的好处等

ruby-on-rails - 如何将这个 ERB 转换为 Slim 模板语言?

ruby-on-rails - 通过关联在 has_many 中的连接表中添加一个额外的字段

ruby - 如何在 Ruby 中将键值对列表转换为哈希,以便将具有重复键的值存储在数组中?

ruby - 加密空字符串

ruby - 如何从 Rails 中的代码解析和发送整个复杂的 XML

ruby-on-rails - 使用 RSpec 和 Factory Girl 测试设计

ruby-on-rails - Rails (Activerecord) - 无法使用没有重复的连接和全局总和进行查询