Rails 3.1测试环境中设置主机

4

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

在开发环境中,我在config/environments/development.rb中设置了如下内容,它可以正常工作:

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

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


这是一个常见的问题,请参考此线程:http://rubyforge.org/pipermail/rspec-users/2012-January/021016.html - Chris Salzberg
1个回答

5
测试依赖于default_url_options会带来各种问题,请参见此线程此问题以获取示例。
我已通过在测试中修补ActionDispatch::Routing::RouteSet来解决该问题,以强制Rails包括我想要的任何选项的默认值(在我的情况下为locale)。有关详细信息,请参见上面链接到的Github问题中的我的答案。
要使用相同的方法覆盖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文件中,应该就可以解决问题了。

使用 :host => 'localhost', :port => '3000' 非常顺利。 - Eric Yang
1
有人应该写一篇博客文章或其他关于这个问题的东西,因为它经常出现... 无论如何,很高兴补丁修复了这个问题。 - Chris Salzberg
我遇到了类似的问题。我的应用程序路由正确,但是测试服务器似乎没有运行,并且在我的测试中不断出现“连接被拒绝”的错误。你也遇到过这种情况吗?想知道如何与测试服务器建立连接... - picardo
这似乎对于一个配置问题来说有些过度了。 - netwire

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接