2011-08-24 14 views
19

vedo posso testare le rotte con RSpec come questo:RSpec test percorso e gli host

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

ma non ho vincoli in base al nome host o parti di nomi di host e reindirizza tra diversi quelli. Come posso specificare un nome host durante il test?

Come si eseguono i test con la configurazione corretta? Ho provato la stampa root_url ed ho ottenuto:

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

risposta

52

Lo stesso errore si verifica sulla mia ogni volta che corro rspec spec/

L'intero errore è in realtà:

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 

la seguente riga:

# ./app/views/devise/mailer/confirmation_instructions.html.erb:5:in `_app_views_devise_mailer_confirmation_instructions_html_erb__980323237__638702928' 

in realtà mi ha dato il suggerimento che escogitare è quello che lancia l'errore.

venuto fuori che non ho impostato

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

a config/environments/test.rb (solo in development.rb)

Aggiunta l'opzione di configurazione sgomberato gli errori sulla mia. Sospetto che tu stia utilizzando altre gemme che richiedono lo stesso set di opzioni.

+0

non sto usando ideare, e ho avuto la stesso errore quando stavo cercando di usare qualcosa_url invece di qualcosa_path in una delle mie visualizzazioni mailer - perché actionmailer non ha idea di che tipo di ambiente sia in esecuzione. La tua soluzione funziona, ma volevo solo chiarire che non è causata da ideare. – Oranges13

+2

@ Oranges13: 6 mesi dopo e posso vedere chiaramente che non è concepito che causa l'errore, è solo che è passato attraverso le viste di 'ideazione'. Sono felice di aver documentato il mio intero processo di debug, mi ha fatto capire quanto Rails ho imparato. – Rystraum

+1

@Rystraum Potrei risolvere il problema con la tua soluzione. Tuttavia, partendo dal presupposto che il tuo modello Utente includa il modulo ': confirmable' di Devise nella definizione di fabbrica per l'attributo': user' confirm_at confermato nel modo seguente 'confirmed_at {Time.now}' impedisce l'errore * Mancante host ... *. Tuttavia, l'impostazione di un host predefinito è necessaria quando il nostro codice implica la generazione di URL assoluti per i collegamenti. Grazie. –

8

Nel mio caso ho dovuto aggiungere

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

al seguente per

config/environments/test.rb 

perché stavo usando factorygirl per generare un utente senza saltare l'email_confirmation dall'utente.

19

Nessuno dei precedenti ha funzionato per me. L'aggiunta dei seguenti alla mia spec_helper.rb (nel mio caso spec/supporto/mailer.rb che è incluso nel spec_helper.rb) fissato l'errore:

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

+0

Questo mi ha aiutato, ma ho dovuto metterlo nella _rails_helper.rb_ invece. Grazie – Sparkmasterflex