it-swarm.com.de

Wie setze ich Anforderungsheader in der rspec Anforderungsspezifikation?

In der Controller-Spezifikation kann ich den HTTP-Accept-Header wie folgt festlegen:

request.accept = "application/json"

in der Anforderungsspezifikation ist das Objekt "request" jedoch null. Wie kann ich das hier machen?

Der Grund, warum ich den http accept-Header auf json setzen möchte, ist, dass ich dies tun kann:

get '/my/path'

an Stelle von

get '/my/path.json'
120
Sergey

Sie sollten in der Lage sein, HTTP-Header als drittes Argument für Ihre get () -Methode anzugeben, wie hier beschrieben:

http://api.rubyonrails.org/classes/ActionDispatch/Integration/RequestHelpers.html#method-i-get

und hier

http://api.rubyonrails.org/classes/ActionDispatch/Integration/Session.html#method-i-process

Sie können also Folgendes ausprobieren:

get '/my/path', nil, {'HTTP_ACCEPT' => "application/json"}
130
awaage

Ich habe dies in Test :: Unit verwendet:

@request.env['HTTP_ACCEPT'] = "*/*, application/youtube-client"
get :index
38

Dies funktioniert für Controller-Spezifikationen, nicht für Anforderungsspezifikationen:

request.headers["My Header"] = "something"
17
morgoth

Ich füge dies hier hinzu, da ich beim Versuch, dies in Rails 5.1.rc1

Die Signatur der get-Methode ist jetzt etwas anders.

Sie müssen die Optionen nach dem Pfad als Schlüsselwortargumente angeben, d. H.

get /some/path, headers: {'ACCEPT' => 'application/json'}

Zu Ihrer Information, die ganze Reihe von Schlüsselwortargumenten sind:

params: {}, headers: {}, env: {}, xhr: false, as: :symbol

13
Jules Copeland

Verwenden von rspec mit Rack::Test::Methods

header 'X_YOUR_HEADER_VAR', 'val'
get '/path'

Die Header-Variable wird als X-Your-Header-Var

8
marcusb

Ich muss Header separat einrichten

request.headers["Accept"] = "application/json"

Der Versuch, es über get/delete/.... zu senden, ist in Rails4 völliger Müll und bereitet mir Kopfschmerzen, da es nie als Header, sondern als Parameter gesendet wird.

{"Accept" => "application/json"}
8
user4694178

Mit RSpec 3 können Sie die folgende Syntax verwenden

get my_resource_path, params: {}, headers: { 'HTTP_ACCEPT' => "application/json" }

Wie beschrieben in der offiziellen Rspec-Dokumentation (der Link zeigt auf v3.7)

4

Beides senden xhr: true und Header, die ich zum Beispiel machen musste:

my_headers = { "HTTP_ACCEPT": "application/json" }
get my_path, xhr: true, headers: my_headers
4
Jim Stewart

Versuchen Sie etwas wie:

get :index, :format => 'json' 
3
gayavat

Ihre Frage wurde bereits beantwortet, aber falls Sie POST etwas zu einer anderen Aktion hinzufügen möchten, müssen Sie dies tun:

post :save, {format: :json, application: {param1: "test", param2: "test"}}
2
Igor Escobar