2014-05-06 18 views
6

Ich versuche derzeit eine vorhandene API mit apiary.io darzustellen. Das System implementiert die Authentifizierung über eine Anmeldeanforderung, die ein http-Cookie zurückgibt, das eine Sitzungs-ID enthält.Wie können Sitzungen im api Blueprint-Format dargestellt werden?

Soweit ich weiß, ist es Standard, dass ein Browser alle http-Cookies, die er zuvor von einem Host erhalten hat, zurück an ihn sendet, wenn er eine weitere Anfrage macht.

Es scheint, dass dies nicht von Dredd getan wird, wenn ein Test ausgeführt wird, der von meiner Blueprint-Datei generiert wird. Aus diesem Grund funktionieren alle Anfragen, die der Benutzer zum Anmelden benötigt, nicht ordnungsgemäß für den Test.

Gibt es eine Möglichkeit, eine Anfrage als "muss vor dem Ausführen dieser Anfrage" zu markieren, bzw. um Dredd zu zwingen, diese http-Cookies zu verwalten?

BTW, der REST-Service ist implementiert in Sails.js, einem mvc-framework für node.js.

Antwort

0

Die Dredd soll ausgeführt werden und gegen eine Testumgebung z. in einem CI-Tool mit Testaufnahmen. Es sollte nicht in einer Produktionsumgebung ausgeführt werden.

Aus diesem Grund ist es gelegentlich erforderlich, während des Testens eines Endpunkts eine Setup- oder Teardown-Aktion durchzuführen. Es ist geplant, eventuell test scenarios anzubieten.

Wenn Sie die Setup/Teardown-Funktionalität benötigen, können Sie die Dredd "Haken" wie besprochen here.

1

Das ist alt, aber ich lief nur in das gleiche Problem und die dredd docs sind ziemlich veraltet (nicht, dass ironische ?! ist), so da ich es dachte, dies jemand helfen kann aus :)

Sie können lesen und überschreiben Antwort und Anfrage Körper und Header mit hooks (das ist die aktuellste Seite, die ich zu dem Thema fand, aber immer noch Probleme und Tippfehler). Ein Vorbehalt ist, dass dredd scheint keine Helfer für Cookies, so dass Sie selbst analysieren und Cookies Header erstellen müssen.

In meinem Fall kommt die sessionId zurück in der JSON-Körper sowie als Cookie: Ich habe den Körper analysiert, da das einfacher ist, aber Sie können die Sitzung aus dem Antwort-Cookie bei Bedarf sehr gut abrufen. Hier ist etwa der Haken Ich schrieb Auth Arbeit zu machen:

hooks = require('hooks'); 
stash = {} 

// hook to retrieve session on a login 
hooks.after('Auth > /remoteauth/userpass > POST', function(transaction){ 
    stash['token'] = JSON.parse(transaction.real.body)['sessionId']; 
}); 

// hook to set the session cookie in all following requests 
hooks.beforeEach(function(transaction){ 
    if(stash['token'] != undefined){ 
    transaction.request['headers']['Cookie'] = "id=" + stash['token'] 
    }; 
}); 

The docs erklären, wie die Haken einzurichten, obwohl eine Sache, die mich angesprochen ist, dass der dredd --names Befehl funktioniert nicht, wenn Sie eine dredd.yml Datei in das gleiche Verzeichnis (scheint wie das Vorhandensein der Datei macht Dredd alle Befehlszeilenargumente zu ignorieren).

Verwandte Themen