2010-12-08 2 views

Antwort

43

Wenn Sie request.user_agent in Ihrer Anwendung verwenden, können Sie den folgenden Code schreiben:

get '/', {}, { "HTTP_USER_AGENT" => "Googlebot" } 
+2

Ist das irgendwo dokumentiert? –

+0

Awesome - wissen Sie, wie Sie dies für alle Anfragen während der Integrationstests einstellen können? –

+0

Kannst du erklären, warum das Passieren von Symbolen nicht mehr funktioniert? Dies scheint aus syntaktischer Sicht ein Schritt zurück zu sein und ein unnötiger Migrationsaufwand beim Portieren von 2.x. – Matthias

-1

Ein User-Agent ist nur ein HTTP-Header, so sollten Sie die Methoden der Lage sein, hier zu verwenden: http://guides.rubyonrails.org/testing.html#helpers-available-for-integration-tests

Und passieren in den User-Agent zu den Headern (habe ich nicht getestet):

headers = {"User-Agent" => "Googlebot"} 
request_via_redirect(:get, '/', {}, headers) 
+0

Das mache ich. 'request.user_agent' in meinem Controller gibt nil zurück. Wenn ich das gleiche Experiment für die laufende App mache, wird der Benutzeragent zurückgegeben. –

+0

haben Sie versucht, request.headers ['User-Agent'] – zsalzbank

+0

funktioniert nicht - das gleiche Problem hier mit Accept und Content-Type. – Matthias

2

Wenn Sie eine Sammlung von Spezifikationen haben, die alle einen bestimmten Benutzer benötigen Agent, finden Sie möglicherweise die folgenden helfen, Ihre Spezifikationen zu trocknen:

Definieren Sie dies irgendwo (z. spec_helper.rb):

module DefaultUserAgent 

    def post(uri, params = {}, session = {}) 
    super uri, params, {'HTTP_USER_AGENT' => MY_USER_AGENT}.merge(session) 
    end 

    def get(uri, params = {}, session = {}) 
    super uri, params, {'HTTP_USER_AGENT' => MY_USER_AGENT}.merge(session) 
    end 

end 

Dann einfach include DefaultUserAgent, wenn Sie es brauchen.

7

Ich habe dieses Verhalten behoben und mit Rails 4.0 können Sie in Integrations- und Funktionstests tatsächliche HTTP-Header wie "User-Agent" und "Content-Type" angeben. Sie müssen diese nicht mehr als CGI-Variablen angeben.

Wenn Sie Interesse haben Sie einen Blick auf die Änderung haben: https://github.com/rails/rails/pull/9700

15

Keine der oben genannten Antworten für mich gearbeitet, die folgende ist, was schließlich in einem rspec Controller Test gearbeitet:

@request.user_agent = "a MobileDevice/User-Agent" 
post :endpoint, param: 2354 
+0

undefined Methode' user_agent = 'für nil: NilClass – Eddie

2

für mich selbst in einem Controller-Test in rspec3, benutzte ich

request.env["HTTP_USER_AGENT"] = "Hello" 

Vor dem antragstell

Verwandte Themen