【问题标题】:How to change Rails application config on a per-spec basis?如何根据规范更改 Rails 应用程序配置?
【发布时间】:2020-05-13 00:22:11
【问题描述】:

我们的 Rails 应用有一个自定义的 404 和 500 页面:

  match '/500', :to => 'errors#internal_server_error', :via => :all

我们有一些规范来确保它有效。

在 test.rb 中:

Rails.application.configure do
  config.consider_all_requests_local     = false
  config.action_dispatch.show_exceptions = true
end

但是,在开发过程中,异常被吞没,因此很难弄清楚发生了什么。

因此,对于某些测试,我们需要上述配置,而其他规格则需要不同的配置。但是配置是在测试运行之前设置的,所以无法更新。

如何更新前块中单个规范的配置?

导轨 6

编辑:我尝试过的:

Shira 提到了嘲笑,但这似乎没有任何作用。

Rails.application.config.consider_all_requests_local     = false
Rails.application.config.action_dispatch.show_exceptions = true

这确实有效,但仅在第一个请求之前。在第一次请求之后,它什么也不做。

Rails.application.config.consider_all_requests_local     = ->{ ENV['...'] }

这不起作用。

似乎问题在于这些配置在中间件中使用,并且一旦配置了应用程序,更改就不会反映。

我试图找到一种方法来重新初始化 Rails 应用程序,但似乎没有办法。

我想唯一的方法是猴子修补中间件以使用带有 ENV 的 Proc...

【问题讨论】:

    标签: ruby-on-rails ruby-on-rails-6


    【解决方案1】:

    我不确定是否可以实际更改配置,但您可以模拟此配置:

    allow(Rails.application.config).to receive(:consider_all_requests_local).and_return(true)
    

    【讨论】:

    • 我在我的规范中检查了它并且它有效。我看到您找到了解决方案,但也许它会在未来对其他人有所帮助。
    【解决方案2】:

    确实有效:

    Rails.application.env_config['action_dispatch.show_exceptions']          = true
    Rails.application.env_config['action_dispatch.show_detailed_exceptions'] = false
    

    感谢艾略特·赛克斯https://www.eliotsykes.com/realistic-error-responses

    【讨论】:

      猜你喜欢
      • 2015-11-15
      • 2013-07-31
      • 2016-04-17
      • 1970-01-01
      • 1970-01-01
      • 2019-03-17
      • 2013-07-31
      • 1970-01-01
      • 2011-11-15
      相关资源
      最近更新 更多