【问题标题】:Rails Path Helpers not selecting application host for requestsRails Path Helpers 没有为请求选择应用程序主机
【发布时间】:2021-07-09 14:09:58
【问题描述】:

我的规格不合格,当我去检查它们时,所有请求都发送到http://www.example.com。所以对我来说似乎很明显,有些东西正在覆盖默认主机,但是当我为example.com 的实例使用 grep 应用程序时,我找不到任何导致它在那里直接请求的东西,相反,我有两个地方明确地将请求定向到 localhost

spec/rails_helper.rb

  config.before(:each) do
    host! "https://localhost:3000"
  end

config/environments/test.rb

  Rails.application.routes.default_url_options[:host] = 'localhost:3000'

关于什么可以覆盖这一点以及我如何更积极地强制路由助手使用 localhost 作为主机的任何想法?

【问题讨论】:

  • 在集成测试中设置default_url_options 存在一个长期存在的(古老的)问题(例如github.com/rails/rails/issues/546),因为ActionDispatch::IntegrationTest 忽略了您期望设置默认选项的所有合理方式.大多数建议的解决方案都建议根据您使用的 Rails 版本以一种或另一种方式对 ActionDispatch 进行猴子修补。
  • @rmlockerd 哇好找!如果你想基本上把它写成答案,我会接受

标签: ruby-on-rails rspec


【解决方案1】:

正如上面提到的@rmlockerd,这似乎回到了动作调度的一个老问题,可能在 Rails 6 中以某种方式重新出现

这是由ActionDispatch::Integration::Session 中的此代码引起的,该代码将example.com 硬编码为DEFAULT_HOST

https://github.com/rails/rails/blob/d45baa34445379319f5c46f6d13f52e6dd79bc9a/actionpack/lib/action_dispatch/testing/integration.rb#L84

在这个 Rails 问题https://github.com/rails/rails/issues/546中有一些进一步的信息

鉴于此,您可以修改该类以将默认主机和协议设置为您想要的任何内容。可能很糟糕,我确信有更好的方法,但我不知道它是什么。

所以在我的rails_helper.rb 的主要范围内我添加了

module ActionDispatch
  module Integration #:nodoc:
    class Session
      DEFAULT_HOST = "localhost"

      def https?
        true
      end
    end
  end
end

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-10-27
    • 2016-07-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多