Ich sende eine Netzwerkanforderung in einem Testfall, dies dauert jedoch manchmal länger als 2 Sekunden (Standardzeitlimit).
Wie erhöhe ich das Timeout für einen einzelnen Testfall?
Los geht's: http://mochajs.org/#test-level
it('accesses the network', function(done){
this.timeout(500);
[Put network code here, with done() in the callback]
})
Verwenden Sie für die Pfeilfunktion Folgendes:
it('accesses the network', (done) => {
[Put network code here, with done() in the callback]
}).timeout(500);
before(function(done){this.timeout(5 * 1000);...});
.timeout(500)
zum Ende hinzufügenit(...).timeout(500)
Wenn Sie es6-Pfeilfunktionen verwenden möchten, können Sie
.timeout(ms)
am Ende Ihrerit
Definition ein hinzufügen :Zumindest funktioniert dies in Typescript.
quelle
.timeout
nicht in den DefinitelyTyped-Typisierungen für Mokka enthalten: i.imgur.com/jQbWCn1.png - Die Verwendungthis.timeout(2000)
oder Verwendungthis.slow(500)
einer regulären alten Funktion funktioniert und kompiliert fehlerfreiit
, es funktioniert nicht fürdescribe
.describe()
oder zu tuncontext()
?.timeout
ist jetzt in den Mokka-Typisierungen von DefinitelyTyped enthalten unter :Mocha.IRunnable
. Wenn Sie jedoch die Webstorm-IDE zum Ausführen dieser Tests verwenden, ist Vorsicht geboten: Aus welchem Grund auch immer, das Mocha-Integrations-Plugin von WebStorm erkennt Mocha-Tests mit.timeout()
angehängten Tests immer noch nicht (was bedeutet, dass keine Schaltfläche "Ausführen" neben ihnen angezeigt wird). und daher befürworte ich, Pfeilfunktionen zu vermeiden, umthis.timeout()
stattdessen die Verwendung zu ermöglichen .(seit ich heute darauf gestoßen bin)
Seien Sie vorsichtig, wenn Sie die ES2015-Fettpfeilsyntax verwenden:
Dies wird fehlschlagen:
EDIT: Warum es fehlschlägt:
Wie @atoth in den Kommentaren erwähnt, Fett Pfeil Funktionen haben keine eigene diese Bindung. Daher ist es der it- Funktion nicht möglich , sich an diesen Rückruf zu binden und eine Timeout- Funktion bereitzustellen .
Fazit : Verwenden Sie keine Pfeilfunktionen für Funktionen, die eine längere Zeitüberschreitung erfordern.
quelle
this
Bindung für Pfeilfunktionen - nicht der gleiche Weg würde bedeuten, dass sie eine Art haben, nur anders. Sie haben nur lexikalische Bereiche. Sie können nicht vorhandene nicht binden. Aus diesem Grunde.bind
,.call
ist etc. nicht mit ihm arbeiten.this
ist.Wenn Sie in NodeJS verwenden, können Sie das Zeitlimit in package.json festlegen
dann kannst du mit npm laufen wie:
quelle
Über die Befehlszeile:
quelle
Sie könnten auch überlegen, einen anderen Ansatz zu wählen und den Aufruf der Netzwerkressource durch einen Stub oder ein Scheinobjekt zu ersetzen. Mit Sinon können Sie die App vom Netzwerkdienst entkoppeln und Ihre Entwicklungsanstrengungen konzentrieren.
quelle
Für Testfahrten am
Express
:Im Beispiel beträgt die Testzeit 4000 (4 s).
Hinweis:
setTimeout(done, 3500)
ist geringfügig, alsdone
innerhalb der Testzeit aufgerufen wird,clearTimeout(timeOut)
es wird jedoch vermieden, dass diese Zeit verwendet wird.quelle
Das hat bei mir funktioniert! Konnte vorher nichts finden, mit dem es funktioniert ()
quelle