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'
ruby-on-rails
json
testing
rspec
Sergey
quelle
quelle
get '/my/path', nil, {'HTTP_ACCEPT' => "application/json"}
:authorization
.get my_resource_path, params: {}, headers: { 'HTTP_ACCEPT' => "application/json" }
`Ich habe dies in Test :: Unit verwendet:
quelle
ActionController::TestCase
Cookie
im Header-Hash genannten Schlüssel zu verwenden (weil mein Browser dies sendet), aber es hat nicht funktioniert. Dann habe ichrequest.keys
einen Schlüssel namens gesehenHTTP_COOKIE
. Damit hat es funktioniert. Sie sollten das wirklich besser dokumentieren.Dies funktioniert für Controller-Spezifikationen, nicht für Anforderungsspezifikationen:
quelle
request.headers
oderrequest.env
Ich füge dies hier hinzu, da ich beim Versuch, dies in Rails 5.1.rc1 zu tun, größtenteils stecken geblieben bin
Die Signatur der get-Methode unterscheidet sich jetzt geringfügig.
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 vollständigen Schlüsselwortargumente lauten:
params: {}, headers: {}, env: {}, xhr: false, as: :symbol
quelle
Ich muss Header separat einrichten
Der Versuch, es über get / delete / .... zu senden, ist völliger Müll in Rails4 und verursacht Kopfschmerzen, da es nie als Header, sondern als Parameter gesendet wird.
quelle
Verwenden von rspec mit
Rack::Test::Methods
Der Header var wird als durchkommen
X-Your-Header-Var
quelle
Test::Unit
nicht für RSpec.ndefined method 'header'
Fehler für mich auf.Mit RSpec 3 können Sie die folgende Syntax verwenden
Wie in der offiziellen Rspec-Dokumentation beschrieben (der Link verweist auf v3.7)
quelle
Um beide
xhr: true
und Header zu senden , musste ich zB Folgendes tun:quelle
headers =
seinmy_headers =
?Ihre Frage wurde bereits beantwortet, aber falls Sie etwas an eine andere Aktion senden möchten, müssen Sie Folgendes tun:
quelle
Versuchen Sie etwas wie:
quelle
format=json
als Abfrageparameter hinzugefügt. Nicht dasselbe wie ein Headerfeld.