我发现可以像这样使用rspec来测试路由:
get("/").should route_to("welcome#index")
但是我有基于主机名或主机名的部分以及在几个主机之间进行重定向的约束条件。如何在测试时指定主机名?
如何使用适当的配置运行测试? 我尝试打印root_url并且得到了以下信息:
缺少链接的主机! 请提供:host参数,设置default_url_options[:host],或将:only_path设置为true
我发现可以像这样使用rspec来测试路由:
get("/").should route_to("welcome#index")
但是我有基于主机名或主机名的部分以及在几个主机之间进行重定向的约束条件。如何在测试时指定主机名?
如何使用适当的配置运行测试? 我尝试打印root_url并且得到了以下信息:
缺少链接的主机! 请提供:host参数,设置default_url_options[:host],或将:only_path设置为true
每当我运行rspec spec/
时,我的机器上都会发生相同的错误。
事实上,整个错误信息是:
Failure/Error: @user = Factory(:user)
ActionView::Template::Error:
Missing host to link to! Please provide the :host parameter, set default_url_options[:host], or set :only_path to true
# ./app/views/devise/mailer/confirmation_instructions.html.erb:5:in `_app_views_devise_mailer_confirmation_instructions_html_erb__980323237__638702928'
# ./spec/models/campaign_spec.rb:21
以下内容:
以下一行:
# ./app/views/devise/mailer/confirmation_instructions.html.erb:5:in `_app_views_devise_mailer_confirmation_instructions_html_erb__980323237__638702928'
实际上是Devise抛出了错误,这给了我提示。
原来我没有设置。config.action_mailer.default_url_options = { :host => 'localhost:3000' }
在 config/environments/test.rb
中添加该配置选项(仅在 development.rb 文件中)。
添加此配置选项可以清除我的错误。 我怀疑您正在使用其他需要相同选项集的 gem。
上述方法对我无效。将以下内容添加到spec_helper.rb(在我的情况下是spec/support/mailer.rb,该文件已包含在spec_helper.rb中)可以解决这个错误:
Rails.application.routes.default_url_options[:host] = 'test.host'
config.action_mailer.default_url_options = { :host => 'localhost:5000' }
转换为以下内容
config/environments/test.rb
:confirmable
模块,那么在你的:user
工厂定义中,以以下方式设置confirmed_at
属性可以防止*Missing host...*错误:confirmed_at { Time.now }
。尽管如此,在我们的代码涉及生成链接的绝对URL时,设置默认主机是必需的。谢谢。 - Jignesh Gohel