Wenn wir eine Unit-Test-Datei my-spec.js haben und mit Mokka laufen:
mocha my-spec.js
Das Standardzeitlimit beträgt 2000 ms. Es kann für einen Teiltest mit einem Befehlszeilenparameter überschrieben werden:
mocha my-spec.js --timeout 5000
Ist es möglich, das Standardzeitlimit für alle Tests global zu ändern? Das heißt, der Standardwert für das Zeitlimit unterscheidet sich von 2000 ms, wenn Sie Folgendes aufrufen:
mocha my-spec.js
Antworten:
Standardmäßig liest Mocha eine Datei mit dem Namen
test/mocha.opts
, die Befehlszeilenargumente enthalten kann. Sie können also eine solche Datei erstellen, die Folgendes enthält:Wenn Sie Mocha über die Befehlszeile ausführen, wird diese Datei gelesen und standardmäßig eine Zeitüberschreitung von 5 Sekunden festgelegt.
Eine andere Möglichkeit, die je nach Ihrer Situation besser sein kann, besteht darin, sie in einem
describe
Aufruf der obersten Ebene in Ihrer Testdatei wie folgt festzulegen:Auf diese Weise können Sie eine Zeitüberschreitung nur pro Datei festlegen.
Sie können beide Methoden verwenden, wenn Sie einen globalen Standardwert von 5000 möchten, für einige Dateien jedoch etwas anderes festlegen möchten.
Beachten Sie, dass Sie im Allgemeinen keine Pfeilfunktion verwenden können, wenn Sie anrufen
this.timeout
(oder auf ein anderes Mitgliedthis
dieser Mokka-Sets für Sie zugreifen möchten ). Zum Beispiel funktioniert dies normalerweise nicht :Dies liegt daran, dass eine Pfeilfunktion
this
den Bereich übernimmt, in dem die Funktion angezeigt wird. Mocha ruft die Funktion mit einem guten Wert für auf,this
aber dieser Wert wird nicht innerhalb der Pfeilfunktion übergeben. In der Dokumentation zu Mocha heißt es zu diesem Thema :quelle
/home/me/src/proj/
nach dieser Datei suchen:/home/me/src/proj/test/mocha.opts
this
, was normalerweise dazu führt, dassthis.timeout
Fehler auftreten, wie Sie sie in Ihrem Kommentar anzeigen.Wenn Sie nur die richtige Antwort hinzufügen, können Sie das Zeitlimit mit der Pfeilfunktion wie folgt einstellen:
quelle
describe('suite', () => {...}).timeout(5000)
funktioniert nichtsetTimeout
Anweisungen in die Tests einzufügen .Der Vollständigkeit halber hinzufügen. Wenn Sie (wie ich) ein Skript in Ihrer
package.json
Datei verwenden, fügen Sie einfach die--timeout
Option zu Mokka hinzu:Anschließend können Sie
npm run test
Ihre Testsuite mit einem Zeitlimit von 10.000 Millisekunden ausführen.quelle
In aktuellen Versionen von Mocha kann das Zeitlimit global wie folgt geändert werden:
Fügen Sie einfach die obige Zeile an einer beliebigen Stelle in Ihrer Testsuite hinzu, vorzugsweise oben in Ihrer Spezifikation oder in einem separaten Testhelfer.
In älteren Versionen und nur in einem Browser können Sie die globale Konfiguration mit ändern
mocha.setup
.Die Dokumentation behandelt nicht die globale Zeitlimiteinstellung, bietet jedoch einige Beispiele zum Ändern des Zeitlimits in anderen gängigen Szenarien.
quelle
timeout
Parameter erwähnt. Im Gegenteil, mochajs.org/#timeouts weist an, explizitesetTimeout
Anweisungen in die Tests einzufügen .