Ruby on rails 3 在测试环境中设置默认的“url”选项不会';好像不行
我已将以下代码放入我的Ruby on rails 3 在测试环境中设置默认的“url”选项不会';好像不行,ruby-on-rails-3,testing,rspec,Ruby On Rails 3,Testing,Rspec,我已将以下代码放入我的config/environments/test.rb文件中: config.action_mailer.default_url_options = { :host => "localhost:3000" } 但是,当我运行测试时,所有路由都使用http://test.host。我正在尝试使用一个不接受http://test.host作为有效的回调URI,因此我需要更改它以正确接收API响应。你知道为什么这样不行吗?(我在测试套件中使用RSpec、Guard和Spo
config/environments/test.rb
文件中:
config.action_mailer.default_url_options = { :host => "localhost:3000" }
但是,当我运行测试时,所有路由都使用http://test.host
。我正在尝试使用一个不接受http://test.host
作为有效的回调URI,因此我需要更改它以正确接收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
你是如何运行你的测试的?也许附加
RAILS\u ENV=test
可能会有所帮助。根据我的经验,url\u选项
如果没有一点黑客攻击,就不会通过测试
见例
url\u options
中设置默认语言环境的解决方案就是,强制它使用我想要的任何语言环境。您可以通过以下方式使其适应您的案例:
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文件中的代码,以便我也可以在cucumber测试中使用它
请记住,这将在测试代码和在测试下运行的实际代码中的任何地方对其进行修补,并且它将覆盖您尝试传入的:host
键的任何其他设置(因为修补程序会将传递到url\u中的选项顶部的修复合并到)。就你而言,我相信这不应该是个问题
不过,猴子补丁并不是一个非常优雅的解决方案,我在其他一切都失败后使用了它。您可能会找到一个针对action mailer的更简单的解决方案。现在,您可以在test.rb中设置它们,如下所示:
Rails.application.routes.default_url_options[:host]= 'localhost:3000'
Rails.application.routes.default\u url\u options[:host]=“localhost:3000”
在developemnt.rb/test.rb中,可以更简洁地如下所示:
Rails.application.configure do
# ... other config ...
routes.default_url_options[:host] = 'localhost:3000'
end
添加RAILS\u ENV=test
是什么意思ENV[“RAILS\u ENV”]
已经是的“测试”
。如前所述,我正在使用RSpec、Guard和Spork运行测试。我刚刚运行了bundle exec-guard
,它加载了Spork服务器,该服务器自动运行RSpec测试。根据@parhamr的评论接受。在Rails 5.1.4中工作。为我节省了很多时间。在我的应用程序控制器中为区域设置设置了default\u url\u选项后,我的规格出现了问题。这是固定的。谢谢