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.

Antworten auf die Frage(5)

Ihre Antwort auf die Frage