2016-07-08 20 views
1

Ich schreibe RSpec Tests für eine Rails API, die teilweise mit OAuth2 geschützt ist. Ich muss Tests schreiben wieWie schreibe ich RSpec-Tests, die ein OAuth2-Zugriffstoken erfordern?

  • GET ResourcesController#index
    • wenn access_token vorgesehen
      • zeigt eine Liste von Ressourcen
    • wenn access_token nicht vorgesehen ist
      • Keine Rückkehr Inhalt

und solche Sachen. Ich dachte, ich könnte den Edelstein oauth2 verwenden, aber ich erkannte bald, dass das funktioniert, indem ich tatsächliche HTTP-Anfragen an die Rails-App ausstelle. Ich bin etwas verloren, kann mir jemand in die richtige Richtung zeigen?

EDIT Einige weitere Infos

I Doorkeeper bin mit OAuth2 zu implementieren. Meine Frage hat mit der Tatsache, dass einige Methoden meiner Controller sind versteckt hinter etwas wie die folgenden zu tun:

before_action :doorkeeper_authorize!, only: [:update, :destroy] 

, der überprüft das Vorhandensein und Gültigkeit einer Authentifizierungs-Token. Jetzt müssen diese Token in der Datenbank vorhanden sein. Meine Frage ist dann, wie kann ich entweder

  • setzte diese Token in der Datenbank (auch bekannt als, wie kann ich eine korrekte Anmeldung innerhalb eines RSpec Tests simulieren) oder
  • Trick Pförtner (via Anstoßen?) Denken dass diese Token existieren und gültig sind?

EDIT 2

this gefunden. Fühlen Sie sich frei, Antworten hinzuzufügen, während ich dies lese.

Antwort

1

Sie könnten immer noch verwenden oauth2 Edelstein, es hat viele Beispiele für Stubbing-Zugang Tokens in its own test suite. Ohne ein spezielles Problem, das Sie vielleicht haben, ist es schwierig, mehr Ratschläge zu geben.

Alternativ gibt es vcr gem, das http-Interaktionen aufzeichnet und sie während des Testens ausspielt. Sie können Ihre Live-API-Interaktionen aufzeichnen und dann die Wiedergabe für Ihre Tests verwenden.

UPDATE

Nachdem Sie den Pförtner erwähnt und fand sich seine Dokumente, hier ist ein Beispiel aus der same source.

describe Api::V1::ProfilesController do 
    describe 'GET #index' do 
    let(:token) { double :acceptable? => true } 

    before do 
     controller.stub(:doorkeeper_token) { token } 
     # allow(controller).to receive(:doorkeeper_token) {token} # => RSpec 3 
    end 

    it 'responds with 200' do 
     get :index, :format => :json 
     response.status.should eq(200) 
    end 
    end 
end 

Stubbing: akzeptabel? => true wird den Türsteher-Filter umgehen, da das Token gültig ist. Wenn Sie es vorziehen, false zurückzugeben, wird der Antwortstatus nicht autorisiert.

+0

Dank Nic. Ich hatte diese Beispiele gesehen, aber ich konnte nicht herausfinden, wie ich sie in meinen Tests wiederverwenden konnte. Ich fügte meiner Frage einige Details hinzu, hoffentlich verdeutlicht dies meine Position. – Morpheu5

+0

OK, ich bekomme, wie ich das Token als gültig simulieren kann, aber was, wenn ich sicherstellen möchte, dass meine Controller sich nicht benehmen, wenn das Token nicht gültig ist, oder für einen Benutzer gültig ist, der nicht berechtigt ist, bestimmte durchzuführen Aktionen? – Morpheu5

+0

Mit 'akzeptabel? => falsch? –