我已将以下代码放入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 :通过get
,post
等请求后,它似乎发生了变化。在测试中运行以下代码:
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
答案 0 :(得分:12)
现在你可以像test.rb
那样设置它们:
Rails.application.routes.default_url_options[:host]= 'localhost:3000'
答案 1 :(得分: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
答案 2 :(得分:0)
你是如何运行测试的?也许附加RAILS_ENV=test
可能有所帮助。
答案 3 :(得分:0)
根据我的经验,url_options
不会在没有任何黑客攻击的情况下进入测试阶段。
参见例如
尝试在测试中设置语言环境时,我经常遇到此问题。但是,我从未使用过动作邮件,所以可能有一种更简单的方法。
我在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
密钥的任何其他设置传入(因为补丁合并了传递到url_for
的选项顶部的修复)。在你的情况下,我认为这应该不是问题。