2012-05-09 17 views
6

Los ayudantes de URL (por ejemplo, root_url) devuelven un nombre de host diferente en los controladores de la aplicación frente a los ejemplos de rspec. he podido con éxito para establecer el dominio de ayudantes de URL en mis rieles aplicación como esta:Rieles: Nombre de host incorrecto para los ayudantes de URL en rspec

class ApplicationController < ActionController::Base 
    def default_url_options 
    {host: "foo.com", only_path: false} 
    end 
end 

Por ejemplo, salidas root_url "http://foo.com/" dentro de la aplicación, pero "http://example.com "en mis especificaciones de solicitud. ¿Cuál es la forma recomendada de aplicar esas opciones de url globalmente en rails 3.2 para que afecten a mis especificaciones? Las opciones de url no necesitan ser dinámicas.

Respuesta

4

En las especificaciones de características, anfitrión! ha sido desaprobado. Añadir estos a su rspec_helper.rb:

# Configure Capybara expected host 
Capybara.app_host = 'http://lvh.me:3000' 

# Configure actual routes host during test 
before(:each) do 
    if respond_to?(:default_url_options) 
    default_url_options[:host] = 'http://lvh.me:3000' 
    end 
end 
+0

Para su información, esto falla si la prueba no es controlador/solicitud/función. Una especificación de Helper, por ejemplo, falla con 'variable local indefinida o método default_url_options''. – typeoneerror

2

Puede configurar el host en un bloque antes de su prueba en rspec:

before :each do 
     host! 'hostgoeshere.com' 
    end 

Si desea configurar de forma global se puede poner algo de su archivo spec_helper.rb.

+0

podría ser más específico acerca de lo que el "algo" podría ¿ser? – denishaskin

4

sólo para añadir a la respuesta de Dan se vería algo como esto en spec_helper.rb

RSpec.configure do |config| 
    # other config options 
    config.before(:each) do 
    host! "localhost:3000" 
    end 
end 
+0

No funciona para mí en spec_helper: NoMethodError: método indefinido 'host! '. Estoy usando Rspec 3.2. –

0

He intentado muchas variaciones de @request.host, host! y post path, args, {'SERVER_NAME' => my_secret_domain} sin éxito, tanto como las pruebas del controlador y pruebas de función. Muy irritante, ya que muchos otros reportaron el éxito con esos enfoques.

La solución para mí fue:

request.headers["SERVER_NAME"] = my_secret_domain 
post path, args 

estoy corriendo rubí 2.1.5p273, rspec 3.1.7 y 4.2.0 Carriles

Cuestiones relacionadas