2011-08-24 47 views
19

我看我可以用這樣的rspec的測試路線:rspec的路線測試和主機

get("/").should route_to("welcome#index") 

,但我有一個基於主機名或主機名的部分限制和幾者之間重定向。測試時如何指定主機名?

如何使用適當的配置運行測試?我試圖打印root_url和我:

Missing host to link to! Please provide the :host parameter, set default_url_options[:host], or set :only_path to true

回答

52

上,每當我跑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' 

居然給了我設計的提示是拋出錯誤的提示。

原來我沒有在config/environments/test.rb設置

config.action_mailer.default_url_options = { :host => 'localhost:3000' } 

(僅在development.rb)

添加配置選項清除了地雷的錯誤。 我懷疑你正在使用其他需要相同選項集的寶石。

+0

我不使用設計,並且我得到了同樣的錯誤,當我試圖在我的一個郵件視圖中使用something_url而不是something_path時 - 因爲actionmailer不知道它運行的是什麼類型的環境。您的解決方案有效,但我只是想澄清它不是造成的由設計。 – Oranges13

+2

@ Oranges13:6個月後,我可以清楚地看到,它不是造成錯誤,它只是通過設計的意見。我很高興我記錄了我的整個調試過程,讓我意識到我學到了多少Rails。 – Rystraum

+1

@Rystraum我可以用你的解決方案解決這個問題。然而,假設你的用戶模型包含Devise的':confirmable'模塊,那麼在你的工廠定義中爲':user'設置confirm_at屬性,方法如下:confirm_at {Time.now}'防止* Missing host ... *錯誤。儘管如此,當我們的代碼涉及爲鏈接生成絕對URL時,需要設置默認主機。謝謝。 –

8

在我來說,我有,因爲我是用FactoryGirl生成用戶不跳過從用戶email_confirmation添加

config.action_mailer.default_url_options = { :host => 'localhost:5000' } 

到下面來

config/environments/test.rb 

19

以上都不適合我。添加以下到我的spec_helper.rb(在我的情況規格/支持/ mailer.rb包含在spec_helper.rb)修正了錯誤:

Rails.application.routes.default_url_options[:host] = 'test.host'

+0

這幫了我,但我不得不把它放在_rails_helper.rb_中。謝謝 – Sparkmasterflex