【问题标题】:Setting default_url_options in test environment doesn't seem to work在测试环境中设置 default_url_options 似乎不起作用
【发布时间】:2019-01-16 11:30:05
【问题描述】:

我已将以下代码放入我的config/environments/test.rb 文件中:

config.action_mailer.default_url_options = { :host => "localhost:3000" }

但是,当我运行测试时,所有路由都使用http://test.host。我正在尝试使用不接受 http://test.host 作为有效回调 URI 的 API,因此我需要更改它以正确接收 API 响应。知道为什么这不起作用吗? (我在我的测试套件中使用 RSpec、Guard 和 Spork)。

编辑:可能相关 - 这是在控制器规范中完成的。

EDIT2:似乎在通过getpost等发出请求后会发生变化。在测试中运行以下代码:

Rails.logger.debug users_url
get 'http://google.com'
Rails.logger.debug users_url

将产生以下输出:

http://localhost:3000/users
...get request related response here
http://google.com/users

【问题讨论】:

    标签: ruby-on-rails-3 testing rspec


    【解决方案1】:

    现在你可以像这样在test.rb 中设置它们:

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

    【讨论】:

      【解决方案2】:

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

      在developemnt.rb/test.rb中,可以更简洁如下:

      Rails.application.configure do
        # ... other config ...
      
        routes.default_url_options[:host] = 'localhost:3000'
      end
      

      【讨论】:

      • 在 Rails 5.1.4 中工作。为我节省了很多时间。
      • 在我的应用控制器中为语言环境设置 default_url_options 后,我的规格出现了问题。这固定了。谢谢!
      【解决方案3】:

      您是如何进行测试的?也许附加 RAILS_ENV=test 可能会有所帮助。

      【讨论】:

      • 附加RAILS_ENV=test是什么意思? ENV["RAILS_ENV"] 已经是 "test"。如前所述,我正在使用 RSpec、Guard 和 Spork 运行测试。我只是运行bundle exec guard,它会加载 Spork 服务器,它会自动运行 RSpec 测试。
      【解决方案4】:

      根据我的经验,url_options 不会在没有一点黑客攻击的情况下通过测试。

      参见例如

      我在尝试在测试中设置语言环境时经常遇到这个问题。不过,我从未使用过 action mailer,所以可能有更简单的方法。

      我找到的在url_options 中设置默认语言环境的解决方案就是patch actiondispatch 并强制它使用我想要的任何语言环境。你可以这样适应你的情况:

      class ActionDispatch::Routing::RouteSet
        def url_for_with_default_url_options(options)
          url_for_without_default_url_options(options.merge(:host => "localhost:3000" ))
        end
      
        alias_method_chain :url_for, :default_url_options
      end
      

      我将该代码放在 spec/support 中的一个文件中,以便在 rspec 测试中使用它,我还从我的 env.rb 文件中需要它,因此我也可以在黄瓜测试中使用它。

      请记住,这将在测试代码和在测试中运行的实际代码中在任何地方对其进行修补,并且它将覆盖您尝试传递的 :host 键的任何其他设置in(因为补丁合并了传递给url_for的选项顶部的修复)。在你的情况下,我认为这不应该是一个问题。

      不过,Monkey 修补并不是一个非常优雅的解决方案,我在其他一切都失败后才使用它。您可能会找到一个更简单的特定于操作邮件程序的解决方案。

      【讨论】:

        猜你喜欢
        • 2015-12-15
        • 2012-04-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-05-30
        相关资源
        最近更新 更多