jasmine.js expect () funktioniert nicht in einem asynchronen Callback
Bin ich erste Bekanntschaft mit Jasmin (http://pivotal.github.com/jasmine/) und fand Sie etwas verwirrend:
it("should be able to send a Ghost Request", function() {
var api = fm.api_wrapper;
api.sendGhostRequest(function(response) {
console.dir('server says: ', response);
});
expect(true).toEqual(false);
});
Ausfällt als erwartet.
Allerdings bewegt das erwarten Aufruf innerhalb der callback:
it("should be able to send a Ghost Request", function() {
var api = fm.api_wrapper;
api.sendGhostRequest(function(response) {
console.dir('server says: ', response);
expect(true).toEqual(false);
});
});
Irgendwie geht :O
Nach einigem Debuggen:
api.sendGhostRequest() ist eine asynchrone ajax-request, und Jasmin vorbeirauscht, bevor die Anforderung beendet hat.
Daher die Frage:
Wie bekomme ich Jasmin zu warten, für die ajax-Ausführung vor der Feststellung das test-Ergebnis?
InformationsquelleAutor der Frage Val Redchenko | 2013-02-28
Du musst angemeldet sein, um einen Kommentar abzugeben.
Bearbeiten für Jasmin 2
Asynchrone tests viel einfacher geworden, Jasmin 2. Jeder test braucht, um zu verarbeiten asynchroner code geschrieben werden kann mit einer callback-welches den Abschluss der Prüfung. Finden Sie die Jasmin 2 docs unter der überschrift Asynchrone Unterstützung
Jasmin 1
Haben Sie einen Blick auf waitsFor() und läuft() auf die Jasmin Standort unter der überschrift Asynchrone Unterstützung.
Verwenden, der läuft und waitsfor zwingen sollte, Jasmin zu warten, für den ajax-call zu beenden oder für einige timeout.
Den code würde wie folgt Aussehen:
In diesem Fall das erwarten würde scheitern.
InformationsquelleAutor der Antwort halfs13
Als @pkopac kommentiert
runs()
undwaitsFor()
wurden als veraltet markiert in v2 zugunsten der Verwendung einerdone()
callback-wie dokumentiert: https://jasmine.github.io/2.0/introduction.html#section-Asynchronous_SupportInformationsquelleAutor der Antwort ptim
Blick in runs() und waitfor()
Speziell können Sie rufen Sie zusammen, um zu überprüfen, dass der Rückruf ausgeführt wurde und in gewisser Weise (vielleicht mit einem boolean überprüfen?) und dann laufen die danach erwarten.
läuft, können Sie warten, bis die waitfor-Anweisung abgeschlossen wurde.
async Jasmin Dokumentation
InformationsquelleAutor der Antwort Ben McCormick