2017-01-16 2 views
0

Ich bin auf der Suche nach einigen Jasmin-Spezifikationen für ein Stück Code, der Async-Funktionalität hat.Jasmine Async-Test ohne settimeout

In dem Jasmin docs zeigt es das Beispiel:

it("takes a long time", function(done) { 
      setTimeout(function() { 
      done(); 
      }, 9000); 
     }); 

die getan Funktion verwenden und eine setTimeout, mein Problem mit diesem setTimout ist also Verzögerungen zerbrechlich sein könnte in Test in Enviros läuft

ist es eine alternative Lösung für solche Tests, bei denen ich kein Timeout verwenden muss?

Vielen Dank im Voraus

+0

Wie berechnen Sie das Ergebnis der asynchronen Funktion - durch Rückruf, Versprechen oder Warten? –

+0

Werfen Sie einen Blick auf [Jasmin-Co] (https://www.npmjs.com/package/jasmine-co). Mit diesem npm-Paket können Sie 'yield' verwenden und' setTimeout() 'und' done() 'löschen. – jengeb

Antwort

1

In diesem Beispiel setTimeout ist eigentlich die Funktion getestet. Es wird als repräsentatives Beispiel für eine asynchrone Funktion verwendet. Der entscheidende Punkt ist, dass Sie explizit done() aufrufen müssen, wenn Ihr Test abgeschlossen ist. Der Code sollte ungefähr so ​​aussehen:

it("takes a long time", function(done) { myMethod('foo', 'bar', function callback() { assert(...) done(); }); // callback-style }

it("takes a long time", function(done) { myMethod('foo', 'bar').then(function() { assert(...) done(); }); // promise-style });

it("takes a long time", async function(done) { await myMethod('foo', 'bar') assert(...) done() });

0

Die dokumentierte Funktion des done Rückruf nach einer langen Lauf Verfahren darzustellen, soll verwendet und sollte nicht verwendet werden für tatsächliche Tests.

Normalerweise würden Sie erwarten, dass eine lange laufende Funktion mit einem Callback versorgt wird, in dem Sie die done Funktion aufrufen würden. Zum Beispiel könnten Sie eine Einheit Test mit einer Datei schreiben, das eine lange Zeit zum Schreiben von Daten nahm:

it("writes a lot of data", function(done) { 
    var fd = 999; // Obtain a file descriptor in some way... 

    fs.write(fd, veryLongString, function (err, written, string) { 
    // Carry out verification here, after the file has been written 
    done(); 
    }); 

Auch dies ist nur die Veranschaulichung, wie man sich im Allgemeinen nicht zu einer Datei innerhalb des Körpers schreiben will von ein Komponententest. Aber die Idee ist, dass Sie done nach einigen lang laufenden Betrieb aufrufen können.

Verwandte Themen