2012-09-25 8 views
20

Ich versuche zu vermeiden, meine session[:referred_by] zu verwenden, und möchte die request.referrer verwenden. Meine RSpec-Tests schlagen jedoch fehl, weil die TestRequest keine request.referrerWie setze ich einen request.referrer in meine RSpec ein?

speichert. Also muss ich Folgendes tun, damit Rspec-Tests funktionieren. Gibt es eine Möglichkeit, es besser zu machen:

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

Antwort

25

es Mock:

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

Oder wenn Sie nicht egal, wenn es nicht genannt bekommt, Stummel es:

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

ActionDispatch::TestRequest erweitert ActionDispatch::Request, die Rack::Request erweitert.

Das Verfahren ist definiert als

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

folgt weit ich mich erinnere, können Sie die Umgebungsvariable in der RSpec Test request.env unter Verwendung von zugreifen können. Es bedeutet, sollte es möglich sein, etwas zu setzen wie

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

Natürlich hängt es von der Art der RSpec Beispiel Gruppe Sie verwenden.

+3

'request.env [ 'HTTP_REFERER'] =‚http: // example.com'' gearbeitete für mich. Rspec-Version ist 3.4.4 – Yoshi

6

Auf Rails 5 scheint die akzeptierte Lösung nicht zu funktionieren, aber die Einstellung request.env['HTTP_REFERER'] direkt, wie Simone Carletti vorschlägt, funktioniert.

0

Für jemand anderes dieses googeln, können Sie auch die Anfrage in einem Helfer-Spezifikation wie folgt Stummel:

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