2016-07-08 15 views
1

Ich bin eine einfache Abfolge von Tests an einer API versucht:Sie können sicherstellen, dass die frisby.js-Test-API-Aufrufe in sequenzieller Reihenfolge ausgeführt werden.

  1. Erstellen Sie ein Benutzer Ressource mit einem POST
  2. Antrag der Benutzer Ressource mit einem GET
  3. Löschen Sie den Benutzer-Ressource mit einem DELETE

Ich habe eine einzige Frisby Testspezifikationsdatei mytest_spec.js. Ich habe den Test in drei diskrete Schritte gebrochen, jede mit ihrem eigenen toss() wie:

f1 = frisby.create("Create"); 
    f1.post(post_url, {user_id: 1}); 
    f1.expectStatus(201); 
    f1.toss(); 

    // stuff... 

    f2 = frisby.create("Get"); 
    f2.get(get_url); 
    f2.expectStatus(200); 
    f2.toss(); 

    //Stuff... 

    f3 = frisby.create("delete"); 
    f3.get(delete_url); 
    f3.expectStatus(200); 
    f3.toss(); 

Ziemlich einfach Sachen, richtig. Allerdings gibt es keine Garantie, dass sie ausgeführt werden, soweit ich das beurteilen kann, da sie asynchron sind. Ich könnte also 404 in Test 2 oder 3 erhalten, wenn der Benutzer zum Zeitpunkt der Ausführung noch nicht existiert.

Kennt jemand den korrekten Weg, sequentielle Tests in Frisby zu erstellen?

Antwort

1

Wie Sie richtig hingewiesen haben, ist Frisby.js asynchron. Es gibt mehrere Ansätze, um es zu zwingen, synchroner zu laufen. Die einfachste, aber nicht die sauberste ist die Verwendung .after(() -> ... Sie können mehr über after() in Fisby.jsdocs finden.

+0

Ja, Verkettung nicht-trivial fließt zusammen mit 'nachher 'wird unordentlich, schnell. Gibt es andere Optionen, um die Vorarbeit für einen Test zu erzwingen, der zuerst ausgeführt wird (Dinge, die Sie nicht wirklich testen müssen, aber für den Test eingerichtet werden müssen)? Dies würde die Kette von 'After()' weniger lang machen. – Ray

+0

Ja, im Fall des Setups für den Test - Nehmen wir an, Sie haben 'scenario_spec.coffee', das vor der Ausführung eine Kontoregistrierung erfordert. Dann können Sie die Datei 'env.coffee' vorbereiten und dort Ihre Registrierung vornehmen. Schließlich initialisieren Sie 'env = require" ./env "' am Anfang von 'scenario_spec.coffee', dann sind Sie sicher, dass Setup (Registrierung) vor Ihrem Fall ausgeführt wird. – Slavo