In meiner Knotenanwendung verwende ich Mokka, um meinen Code zu testen. Beim Aufrufen vieler asynchroner Funktionen mit Mokka wird ein Timeout-Fehler ( Error: timeout of 2000ms exceeded.
) angezeigt . Wie kann ich das beheben?
var module = require('../lib/myModule');
var should = require('chai').should();
describe('Testing Module', function() {
it('Save Data', function(done) {
this.timeout(15000);
var data = {
a: 'aa',
b: 'bb'
};
module.save(data, function(err, res) {
should.not.exist(err);
done();
});
});
it('Get Data By Id', function(done) {
var id = "28ca9";
module.get(id, function(err, res) {
console.log(res);
should.not.exist(err);
done();
});
});
});
Antworten:
Sie können entweder das Zeitlimit festlegen, wenn Sie Ihren Test ausführen:
Oder Sie können das Zeitlimit für jede Suite oder jeden Test programmgesteuert festlegen:
Weitere Informationen finden Sie in den Dokumenten .
quelle
-t
. Wenn Sie Mokka-Test verwenden, um Mokka von einer Grunzaufgabe auszuführen, wird dies auch im Optionsobjekt unterstütztoptions:{timeout:15000}
.TypeError: this.timeout is not a function
bei der Verwendung"mocha": "^3.5.0"
Ich finde, dass die "Lösung", nur die Zeitüberschreitungen zu erhöhen, verdeckt, was hier wirklich vor sich geht
Normalerweise stoßen Sie auf Nummer 2, wenn Mocha keine Bestätigungsfehler von einem Rückruf erhält. Dies wird durch einen anderen Code verursacht, der die Ausnahme weiter oben im Stapel verschluckt. Der richtige Weg, um damit umzugehen, besteht darin, den Code zu korrigieren und den Fehler nicht zu verschlucken .
Wenn externer Code Ihre Fehler verschluckt
Falls es sich um eine Bibliotheksfunktion handelt, die Sie nicht ändern können, müssen Sie den Assertionsfehler abfangen und selbst an Mocha übergeben. Sie tun dies, indem Sie Ihren Assertion-Rückruf in einen Try / Catch-Block einschließen und alle Ausnahmen an den erledigten Handler übergeben.
Diese Boilerplate kann natürlich in eine Utility-Funktion extrahiert werden, um den Test für das Auge ein wenig angenehmer zu gestalten:
Beschleunigung von Netzwerktests
Abgesehen davon schlage ich vor, dass Sie die Ratschläge zur Verwendung von Teststubs für Netzwerkanrufe lesen, um Tests zu bestehen, ohne auf ein funktionierendes Netzwerk angewiesen zu sein. Mit Mocha, Chai und Sinon könnten die Tests ungefähr so aussehen
Siehe Sinon der
nise
docs für weitere Informationen.quelle
done()
am Ende des Versprechens anrufen. Ich verspotte bereits die Netzwerkanrufe mit Angulars$httpBackend
, aber kein Glück. Es scheint nicht sehr pragmatisch, jede einzelne Spezifikation mit einem Try-Catch zu versehen. Irgendwelche anderen Vorschläge? Vielen Dank!try.... catch...
Arbeiten rund um den Fehler in dem im Test befindlichen Code nicht fix es.Ein bisschen spät, aber jemand kann dies in Zukunft verwenden ... Sie können Ihr Test-Timeout erhöhen, indem Sie die Skripte in Ihrer package.json wie folgt aktualisieren:
"scripts": { "test": "test --timeout 10000" //Adjust to a value you need }
Führen Sie Ihre Tests mit dem Befehl aus
test
quelle
Wenn Sie Pfeilfunktionen verwenden:
quelle
Für mich war das Problem tatsächlich die Beschreibungsfunktion, die bei Bereitstellung einer Pfeilfunktion dazu führt, dass Mokka das Timeout verpasst und sich nicht konsistent verhält. (Mit ES6)
Da kein Versprechen abgelehnt wurde, wurde dieser Fehler ständig für verschiedene Tests angezeigt, die innerhalb des Beschreibungsblocks fehlgeschlagen sind
So sieht es aus, wenn es nicht richtig funktioniert:
und dies funktioniert mit der anonymen Funktion
Hoffe es hilft jemandem, meine Konfiguration für die oben genannten: (nodejs: 8.4.0, npm: 5.3.0, mocha: 3.3.0)
quelle
Mein Problem bestand darin, die Antwort nicht zurückzusenden, daher hing sie. Wenn Sie Express verwenden, stellen Sie sicher, dass res.send (Daten), res.json (Daten) oder eine beliebige API-Methode, die Sie verwenden möchten, für die zu testende Route ausgeführt wird.
quelle
Stellen Sie sicher, dass Sie die in den Testfällen verwendeten Versprechen auflösen / ablehnen, sei es Spione oder Stubs. Stellen Sie sicher, dass sie auflösen / ablehnen.
quelle