Rails 3.1在测试环境中设置主机

时间:2012-11-07 03:17:36

标签: ruby-on-rails rspec config

每当我在测试中使用http://www.example.com时,我都会收到root_url

它在开发中运行良好,我在config / environments / development.rb中有这个:

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

但是,添加它在config / environments / test.rb中不起作用。我应该添加什么来使用localhost:3000作为测试环境中的主机?

1 个答案:

答案 0 :(得分:5)

测试依赖于default_url_options的代码会导致各种问题,有关示例,请参阅this thread和此issue

我通过在测试中修补ActionDispatch::Routing::RouteSet来强制rails包含我想要的任何选项的默认值(在我的情况下为locale),从而解决了这个问题。有关详细信息,请参阅上面链接的github issue中的回答。

使用相同的方法覆盖host选项:

class ActionDispatch::Routing::RouteSet
  def url_for_with_host_fix(options)
    url_for_without_host_fix(options.merge(:host => 'localhost:3000'))
  end

  alias_method_chain :url_for, :host_fix
end

将它放在support的文件中,应该这样做。