Header in RSpec 3-Anfrage setzen
Ich versuche, den Header für einige RSpec-Anforderungen festzulegen, die eine Authentifizierung erfordern. Der Header istACCESS_TOKEN
. Egal wie ich versuche, den Header zu setzen, er wird niemals gesetzt. Ich weiß, dass die App funktioniert, weil ich sie manuell testen kann. Ich kann keine speziellen Tests zum Laufen bringen. Den vollständigen Quellcode und die Tests zu diesem Problem finden Sie hier:https: //github.com/lightswitch05/rspec-set-header-exampl
a die Authentifizierung in den meisten meiner Anforderungsspezifikationen verwendet wird, habe ich ein Support-Hilfsmodul erstellt, um ein Zugriffstoken abzurufen und im Header festzulegen. Unten ist eine Zusammenfassung, wie ich versuche, den Header zu setzen. Alles, was ich versucht habe, finden Sie imfull source
# my_app/spec/support/session_helper.rb
module SessionHelper
def retrieve_access_token
post api_v1_session_path({email: '[email protected]', password: 'poor_password'})
expect(response.response_code).to eq 201
expect(response.body).to match(/"access_token":".{20}"/)
parsed = JSON(response.body)
token = parsed['access_token']['access_token']
@request.headers['HTTP_ACCESS_TOKEN'] = token
end
end
eine Beispielanforderungsspezifikation, die diesen Helfer verwendet und funktionieren sollte, aber immer fehlschlägt, da der Header niemals gesetzt wird:
# my_app/spec/requests/posts_spec.rb
# ...
context "create" do
it "creates a post" do
retrieve_access_token
post = FactoryGirl.build(:post)
post api_v1_posts_path(
post: {
title: post.title,
content: post.content
}
)
expect(response.body).to include('"id":')
expect(response.body).to include('"title":"' + post.title + '"')
expect(response.body).to include('"content":"' + post.content + '"')
expect(response.response_code).to eq 201
end
end
Ich weiß, dass ich die Kopfzeile in den einzelnen @ manuell setzen kaget
undpost
Anfragen - aber das ist keine wartbare Lösung für die API-weite Autorisierung. Stellen Sie sich vor, Sie müssen jeden Test ändern, wenn sich der Headername geringfügig geändert hat.