Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ruby-on-rails-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 3 在测试环境中设置默认的“url”选项不会';好像不行_Ruby On Rails 3_Testing_Rspec - Fatal编程技术网

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选项
如果没有一点黑客攻击,就不会通过测试

见例

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

我找到的在
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选项后,我的规格出现了问题。这是固定的。谢谢