2010-10-27 10 views
19

Tengo un método de ayuda de vista que genera una url al consultar request.dominio y request.port_string.¿Cómo se burla el objeto de solicitud para las pruebas de ayuda rspec?

module ApplicationHelper 
     def root_with_subdomain(subdomain) 
      subdomain += "." unless subdomain.empty?  
      [subdomain, request.domain, request.port_string].join 
     end 
    end 

Me gustaría probar este método utilizando rspec.

describe ApplicationHelper do 
    it "should prepend subdomain to host" do 
    root_with_subdomain("test").should = "test.xxxx:xxxx" 
    end 
end 

Pero cuando corro esto con rspec, me sale esto:

Failure/Error: root_with_subdomain("test").should = "test.xxxx:xxxx" 
`undefined local variable or method `request' for #<RSpec::Core::ExampleGroup::Nested_3:0x98b668c>` 

Puede alguien por favor ayudarme a averiguar lo que hay que hacer para solucionar este problema? ¿Cómo puedo simular el objeto 'solicitud' para este ejemplo?

¿Hay alguna forma mejor de generar URLs donde se usan subdominios?

Gracias de antemano.

Respuesta

21

Usted tiene que anteponer el método de ayuda con el 'ayudante':

describe ApplicationHelper do 
    it "should prepend subdomain to host" do 
    helper.root_with_subdomain("test").should = "test.xxxx:xxxx" 
    end 
end 

Además para probar el comportamiento de las diferentes opciones de solicitud, se puede acceder al objeto de solicitud throught el controlador:

describe ApplicationHelper do 
    it "should prepend subdomain to host" do 
    controller.request.host = 'www.domain.com' 
    helper.root_with_subdomain("test").should = "test.xxxx:xxxx" 
    end 
end 
+2

Da el error: Excepción encontrada: # shailesh

7

I tuve un problema similar, encontré esta solución a funcionar:

before(:each) do 
    helper.request.host = "yourhostandorport" 
end 
+0

Para mí en el controlador funcionó con 'controlador. request.host = "http://test_my.com/" ' – AnkitG

9

Esto no es un complete la respuesta a su pregunta, pero para el registro, puede simular una solicitud usando ActionController::TestRequest.new(). Algo como:

describe ApplicationHelper do 
    it "should prepend subdomain to host" do 
    test_domain = 'xxxx:xxxx' 
    controller.request = ActionController::TestRequest.new(:host => test_domain) 
    helper.root_with_subdomain("test").should = "test.#{test_domain}" 
    end 
end 
+0

¿Podría dar más detalles? –

Cuestiones relacionadas