2011-09-12 13 views
5

Estoy tratando de probar este método que redirecciona a la misma página pero con un www. prefijo si no está allí. Hace la redirección, pero la prueba RSpec devuelve "La respuesta esperada es <: redirigir>, pero era < 200>". ¿Porqué es eso?Prueba RSpec para redirigir devuelve 200

application_controller.rb

def check_uri 
    if request.subdomain.present? and request.subdomain.first != "www" 
     redirect_to request.protocol + "www." + request.host_with_port + request.fullpath if !/^www/.match(request.host) 
    end 
    end 

application_controller_spec.rb #

describe :check_uri do 
    it "should redirect to www" do 
     { :get => "http://sub.lvh.me:3000/accounts/sign_up" }. 
     should redirect_to "http://www.sub.lvh.me:3000/accounts/sign_up" 
    end 
    end 

Cuando elimino errores me sale: (

rdb:1) p response 
#<ActionController::TestResponse:0x0000010277d988 @writer=#<Proc:[email protected]/Users/mm/.rvm/gems/[email protected]/gems/actionpack-3.0.7/lib/action_dispatch/http/response.rb:43 (lambda)>, @block=nil, @length=0, @header={}, @status=200, @body=[], @cookie=[], @sending_file=false, @blank=false, @cache_control={}, @etag=nil> 
+0

¿Se depura la respuesta? ¿Cuál es el contenido de response.body? – e3matheus

+0

¿tiene check_uri como 'before_filter' en application_controller? – dexter

+0

Sí, check_uri se llama a través de before_filter. Agregué la respuesta de depuración a la publicación original. – 99miles

Respuesta

0

Podría probar la ubicación de cabecera de la respuesta?

response.header["Location"].should eq("http://www.sub.lvh.me:3000/accounts/sign_up" 

)

0

Su prueba no está golpeando el método check_uri que ha definido en application_controller.rb, porque RSpec funciona con una serie de prueba predeterminado, por ejemplo, "Test.host" en el puerto 80.

Debe llamar a una acción que está presente en el controlador de la aplicación de resguardo y la solicitud de acogida y el puerto de esta manera:

describe :check_uri do 
    it "should redirect to www" do 
    @request.host = 'sub.lvh.me' 
    @request.port = 3000 

    get :index 

    expect(response).to redirect_to "http://www.sub.lvh.me:3000/accounts/sign_up" 
    end 
end 
Cuestiones relacionadas