2011-08-24 10 views
19

veo que puedo probar rutas con rspec como este:pruebas de ruta y rspec anfitriones

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

pero tienen limitaciones basadas en el nombre de host o partes de nombres de host y redirige entre varios más. ¿Cómo especifico un nombre de host cuando pruebo?

¿Cómo ejecuto las pruebas con la configuración adecuada? He intentado imprimir root_url y tengo:

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

Respuesta

52

El mismo error ocurre en la mía cada vez que corro rspec spec/

El error entera es en realidad:

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 siguiente línea:

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

en realidad me dio la pista de que el dispositivo es el que arroja el error.

Resulta que yo no he puesto

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

en config/environments/test.rb (sólo en development.rb)

Adición de la opción de configuración limpiado los errores en la mía. Sospecho que estás usando otras gemas que requieren el mismo conjunto de opciones.

+0

no estoy usando concebir, y me dio la el mismo error cuando estaba tratando de usar something_url en lugar de something_path en una de mis vistas de correo - porque Actionmailer no tiene idea de en qué tipo de entorno se está ejecutando. Su solución funciona, pero solo quería aclarar que no es causada por idear. – Oranges13

+2

@ Oranges13: 6 meses después y puedo ver claramente que no se concibe causando el error, es solo que pasó por las vistas del dispositivo. Estoy feliz de haber documentado todo mi proceso de depuración, y me doy cuenta de cuánto Rails he aprendido. – Rystraum

+1

@Rystraum Podría resolver el problema con su solución. Sin embargo, suponiendo que su modelo de Usuario incluye el módulo ': confirmable' de Devise, en su definición de fábrica para el atributo': user' confirm_at attribute de la siguiente manera 'confirmed_at {Time.now}' evita el error * Missing host *. Sin embargo, es necesario configurar el host predeterminado cuando nuestro código implica la generación de urls absolutas para los enlaces. Gracias. –

8

En mi caso he tenido que añadir

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

al siguiente para

config/environments/test.rb 

porque estaba usando factorygirl para generar un usuario sin saltarse la email_confirmation del usuario.

19

Ninguno de los anteriores funcionó para mí. Añadiendo lo siguiente a mi spec_helper.rb (en mi caso espec/soporte/mailer.rb que se incluye en spec_helper.rb) fijado el error:

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

+0

Esto me ayudó, pero en su lugar tuve que ponerlo en _rails_helper.rb_. Gracias – Sparkmasterflex

Cuestiones relacionadas