Schlüsselpunkte
QUnit.asyncTest()
, speziell zum Testen asynchroner Code. QUnit.asyncTest()
muss in Kombination mit zwei anderen Methoden verwendet werden: QUnit.start()
und QUnit.stop()
. QUnit.start()
wird verwendet, um die Lauftests zu starten oder wieder aufzunehmen, nachdem der Test gestoppt wurde, während QUnit.stop()
die Anzahl der QUnit.start()
-Anrufe erhöht, die der Testläufer warten muss, bevor sie fortgesetzt werden. QUnit.start()
, QUnit.stop()
und QUnit.asyncTest()
verwendet wird, um Funktionen zu testen, die den Maximalwert einer Reihe von Parametern asynchron berechnen. Vor einigen Wochen habe ich einen Artikel mit dem Titel "Erste Schritte mit Qunit" veröffentlicht, in dem die Hauptkonzepte von Unit -Tests diskutiert und wie man JavaScript -Code mit Qunit testet. In diesem Beitrag konzentrierte ich mich auf die im Framework bereitgestellten Behauptungen und den Testen von Code, das synchron ausgeführt wird. Wenn wir jedoch im realen Leben diskutieren möchten, können wir nicht vermeiden, über asynchrone Funktionen zu sprechen. Genau wie synchrone Funktionen benötigen asynchrone Funktionen Aufmerksamkeit und noch mehr Tests. In diesem Beitrag werde ich Ihnen beibringen, wie man asynchronen Code mit Qunit testet. Wenn Sie sich nicht an die verfügbare Assertionsmethode erinnern oder meinen Artikel komplett verpasst haben, schlage ich vor, dass Sie mit Qunit angefangen haben. Die in diesem Artikel behandelten Materialien werden eine Voraussetzung für diesen Artikel sein.
Erstellen Sie asynchrone Tests unter Verwendung von Qunit
Jedes nicht triviale Projekt, das in JavaScript geschrieben wurde, enthält asynchrone Funktionen. Sie werden verwendet, um eine bestimmte Operation nach einer bestimmten Zeit auszuführen, Daten vom Server abzurufen und sogar Daten an den Server zu senden. Qunit bietet eine Methode namens QUnit.asyncTest()
, die den asynchronen Code testen soll. Die Signatur dieser Methode lautet wie folgt:
QUnit.asyncTest(name, testFunction)
-Parameter haben die gleiche Bedeutung wie QUnit.test()
, aber aus Bequemlichkeit berichte ich sie hier:
name
: Eine Zeichenfolge, die uns hilft, die erstellten Tests zu identifizieren. testFunction
: Funktion, die die Behauptungen enthält, dass das Framework ausgeführt wird. Das Framework übergibt einen Parameter an diese Funktion, mit dem alle Assertionsmethoden von Qunit enthüllt werden. akzeptiert, kann irreführend sein. Sie könnten denken, dass das Prinzip das gleiche ist, und alles, was Sie tun müssen, um eine asynchrone Funktion zu testen, ist, den Aufruf nach QUnit.test()
durch QUnit.asyncTest()
zu ersetzen, und es ist erledigt. Nicht so schnell! Um seine Arbeit zu erledigen, muss QUnit.test()
in Kombination mit zwei anderen Methoden verwendet werden: QUnit.asyncTest()
und QUnit.start()
. Lassen Sie uns mehr über sie erfahren. QUnit.stop()
QUnit.start()
QUnit.stop()
erstellten Test ausführt, wird das Testprogramm automatisch gestoppt. Es wartet dann auf den Funktionsaufruf, der die Behauptung QUnit.asyncTest()
enthält. Der Zweck von QUnit.start()
besteht darin, die Lauftests zu starten oder wieder aufzunehmen, nachdem der Test gestoppt wurde. Diese Methode akzeptiert eine Ganzzahl als einziger optionaler Parameter QUnit.start()
, um mehrere Aufrufe in ein
-Methode gestoppt werden. QUnit.start()
zusammenzuführen. Der Test kann mit der QUnit.stop()
erhöht die Anzahl der -Anrufe, die der Testläufer warten muss, bevor sie fortgesetzt werden. Diese Methode akzeptiert eine Ganzzahl als einziger optionaler Parameter, der die Anzahl der zusätzlichen Aufrufe an
QUnit.start()
angibt, auf die das Framework warten muss. Sein Standardwert beträgt 1. Es ist ein bisschen schwierig zu verstehen, nicht wahr? Die Methodendefinition, die ihre entsprechende Methode beinhaltet, klingt nach einem Chaos. Leider ist das genau das, was sie tun. Die beste Art, diese Konzepte zu klären, besteht darin, Ihnen ein spezifisches Nutzungsbeispiel zu geben. QUnit.start()
In diesem Abschnitt werden wir den bisher diskutierten Ansatz in die Praxis umsetzen. Wenn Sie es gelesen haben, erhalten Sie hoffentlich ein tieferes Verständnis für diesen Mechanismus. Beginnen wir mit einem einfachen Beispiel mit einer der im Artikel entwickelten Funktionen mit Qunit:
. Diese Funktion erfordert eine beliebige Anzahl von Parametern und gibt den Maximalwert zurück. Der Code dieser Funktion lautet wie folgt:
max()
QUnit.asyncTest(name, testFunction)
aufstellen. Der Code, der für asynchrone Testfunktionen verwendet wird (er sollte die Verwendung von max()
verspüren) lautet wie folgt: window.setTimeout()
QUnit.asyncTest(name, testFunction)
Im obigen Code habe ich den Anruf in die max()
-Funktion als Rückruf von window.setTimeout()
abgeschlossen. Nachdem wir die Behauptung mit max()
ausgeführt haben, rufen wir die QUnit.start()
-Methode auf, damit der Testläufer seine Ausführung wieder aufnehmen kann. Wenn wir vermeiden, diese Methode aufzurufen, bleibt der Testläufer stecken und unser Test wird kläglich ausfällt (tatsächlich wird der Test übernommen und nichts anderes, so dass es kein echter Behauptungsversagen ist). Das vorherige Beispiel sollte leicht zu verstehen sein, da es seinem synchronen Gegenstück sehr ähnlich ist. Das Testen für eine Situation allein überzeugt uns jedoch nicht von unserem Kodex. Darüber hinaus hatten wir keine Chance, die praktische Anwendung von QUnit.stop()
zu sehen. Um dieses Problem zu lösen, werden wir alle Behauptungen, die wir im vorherigen Beitrag gesehen haben, in die an QUnit.asyncTest()
übergebene Funktion implementieren. Der komplette Code sieht so aus:
function max() { var max = -Infinity; for (var i = 0; i < arguments.length; i++) { if (arguments[i] > max) { max = arguments[i]; } } return max; }
Im Test haben wir die Anzahl der Behauptungen festgelegt, die wir erwarten, wie wir mit Qunit erörtert haben. Die Funktion ruft dann die QUnit.stop()
-Methode auf. Dies ist notwendig, da wir im Test vier asynchrone Anrufe durchgeführt haben. Wenn wir QUnit.asyncTest()
verwenden, wartet das Framework nur auf einen Anruf QUnit.start()
. Wenn wir den Anruf QUnit.stop()
weglassen und drei weitere Aufrufe bei QUnit.start()
angeben, schlägt der Test fehl, da die erwartete Anzahl der Behauptungen von der Anzahl der ausgeführten Behauptungen unterscheidet. Eine Live -Demonstration des Code, der den Anruf nach expect()
enthält, wird unten angezeigt und als JSBIN bereitgestellt.
asynchrones Test unter Verwendung von Qunit
In diesem Abschnitt haben wir Beispiele für asynchrone Code gesehen, die keine AJAX -Operationen ausführen. Sie möchten jedoch normalerweise Daten aus dem Server laden oder an den Server senden. In diesem Fall ist es besser, sich nicht auf die tatsächlichen Daten oder Ergebnisse zu verlassen, die vom Server zurückgegeben werden, da dies möglicherweise Fehler aufweist (Sie wissen, nichts in der Software ist perfekt). Um dieses Problem zu vermeiden, sollten Sie AJAX -Anfragen simulieren. Dazu können Sie JQuery Mockjax, Sinon.js oder eine andere Bibliothek verwenden, die Ihren Anforderungen entspricht.
Schlussfolgerung
In diesem Tutorial haben Sie gelernt, wie man Tests für asynchrone Funktionen erstellt. Zunächst diskutieren wir, wie ein Test mit asynchronem Code mithilfe der QUnit.asyncTest()
-Methode deklariert wird. Dann verstehen Sie die Existenz von zwei anderen Methoden QUnit.start()
und QUnit.stop()
, die beim Erstellen von Tests mit QUnit.asyncTest()
verwendet werden sollten. Schließlich setzen wir das erworbene Wissen in die Praxis um, indem wir zwei Tests entwickelt haben, um zu demonstrieren, wie diese Methoden zusammenarbeiten. Mit den Themen, die in diesem Tutorial behandelt werden, verfügen Sie über alle Funktionen, die Sie zum Testen von Code benötigen, die Sie möglicherweise in JavaScript schreiben. Ich würde gerne wissen, was Sie von diesem Framework halten und ob Sie in Betracht ziehen würden, ihn in Ihrem Projekt zu verwenden.
FAQs (FAQ) beim Testen asynchroner Code mit Qunit
asynchronisiertes Code bezieht sich auf Operationen, die in überlappenden Zeiträumen gestartet, ausgeführt und abgeschlossen werden können. Dies ist eine Art der Programmierung, mit der mehrere Dinge gleichzeitig geschehen können. Dies ist insbesondere in Anwendungen nützlich, bei denen viele E/A -Operationen oder Aufgaben wie das Erhalten von Daten von einem Server erforderlich sind. Das Testen asynchroner Code ist entscheidend, da er sicherstellt, dass alle Teile des Codes korrekt ausgeführt werden, auch wenn sie gleichzeitig ausgeführt werden. Es hilft, potenzielle Probleme zu identifizieren, die durch überlappende Ausführung verschiedener Codeteile verursacht werden können.
Qunit ist ein leistungsstarkes und benutzerfreundliches JavaScript-Unit-Test-Framework. Es ist in der Lage, gemeinsame JavaScript -Code, einschließlich asynchroner Code, zu testen. Qunit bietet eine "Async" -Einnützigkeitsfunktion, die das Testen asynchroner Code erleichtert. Diese Funktion pausiert das Testprogramm und stellt es wieder her, nachdem der asynchrone Code ausgeführt wurde. Dies stellt sicher, dass Ihre Tests das Verhalten von asynchronem Code genau widerspiegeln.
Verwenden Sie die Funktion "Async" in Qunit, indem Sie sie in der Testfunktion aufrufen. Dadurch wird eine Rückruffunktion zurückgegeben, die Sie nach Abschluss der asynchronen Operation aufrufen sollten. Hier ist ein grundlegendes Beispiel:
QUnit.asyncTest(name, testFunction)
In diesem Beispiel wird die Funktion "Async" verwendet, um das Testprogramm zu pausieren, bis der Rückruf von "Fertig" aufgerufen wird.
... (Die verbleibenden FAQ -Fragen und -Antworten können ähnlich wie im Originaltext umgeschrieben werden, um den Inhalt konsistent zu halten. Die Satzstruktur und die Verwendung von Wort haben sich geändert, um das Kopieren vollständig zu vermeiden.)
Das obige ist der detaillierte Inhalt vonSo testen Sie den asynchronen Code mit Qunit. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!