2012-09-25 23 views
20

Estoy tratando de evitar el uso de mi session[:referred_by], y me gustaría usar el request.referrer. Sin embargo, mis pruebas RSpec fallan porque el TestRequest no almacena un request.referrer¿Cómo configuro request.referrer dentro de mi RSpec?

Así que tengo que hacer lo siguiente para que las pruebas Rspec funcionen. ¿Hay una manera de hacerlo mejor:

referrer = request.referrer ? request.referrer : '/' 
redirect_to referrer, :alert => error_message 

Respuesta

25

Mock que:

specify 'foo' do 
    controller.request.should_receive(:referer).and_return('http://example.com') 
    # get whatever 
end 

O si no le importa si no se consiga llamar, código auxiliar que:

controller.request.stub referer: 'http://example.com' 
22

ActionDispatch::TestRequest se extiende ActionDispatch::Request que se extiende Rack::Request.

El método se define de la siguiente manera

def referer 
    @env['HTTP_REFERER'] 
end 
alias referrer referer 

Por lo que yo recuerdo, puede acceder a la variable de entorno en la prueba RSpec utilizando request.env. Esto significa, que debería ser posible establecer algo así como

request.env['HTTP_REFERER'] = 'http://example.com' 

Por supuesto, depende del tipo de grupo RSpec ejemplo que está utilizando.

+3

'request.env [ 'HTTP_REFERER'] = 'http: // example.com'' trabajados para mi. La versión de Rspec es 3.4.4 – Yoshi

6

En Rails 5 la solución aceptada parece no funcionar, pero la configuración request.env['HTTP_REFERER'] directamente, como Simone Carletti sugiere, funciona.

0

Para cualquier otra persona googlear esto, también se puede derivadas La solicitud de una especificación ayudante de la siguiente manera:

allow(view).to receive_message_chain(:request, :referrer).and_return("http://example.com") 
Cuestiones relacionadas