Ich habe eine Rückruffunktion before()
zum Reinigen der Datenbank. Ist before()
garantiert, dass alles vor dem it()
Start fertig ist ?
before(function(){
db.collection('user').remove({}, function(res){}); // is it guaranteed to finish before it()?
});
it('test spec', function(done){
// do the test
});
after(function(){
});
javascript
asynchronous
mocha
Nicolas S.Xu.
quelle
quelle
before
Handler zurückgeben. ZBbefore(function () { return db.collection...}
Antworten:
Für neue Mokka-Versionen:
Sie können jetzt ein Versprechen an Mokka zurückgeben, und Mokka wartet, bis es abgeschlossen ist, bevor Sie fortfahren. Der folgende Test besteht beispielsweise:
Die Dokumentation finden Sie hier
Für ältere Mokka-Versionen:
Wenn Sie möchten, dass Ihre asynchrone Anforderung abgeschlossen wird, bevor alles andere passiert, müssen Sie den
done
Parameter in Ihrer vorherigen Anforderung verwenden und ihn im Rückruf aufrufen.Mocha wartet dann, bis
done
aufgerufen wird, um mit der Verarbeitung der folgenden Blöcke zu beginnen.Sie sollten jedoch vorsichtig sein, da ein Nicht-Stubben der Datenbank für Unit-Tests die Ausführung stark verlangsamen kann, da Anforderungen in einer Datenbank im Vergleich zur einfachen Codeausführung ziemlich lang sein können.
Weitere Informationen finden Sie in der Mokka-Dokumentation .
quelle
done
. Gib einfach ein Versprechen zurück.before(function () { return db.collection('user').remove({}); })
Daremove()
ein Versprechen zurückgegeben wird, müssen Sie es nicht in einnew Promise()
Hoffentlich sollte Ihre db.collection () ein Versprechen zurückgeben. Wenn ja, können Sie auch das asynchrone Schlüsselwort in before () verwenden.
quelle
after()
? Meinawait
funktioniert einwandfrei, wenn ichbefore()
es aufrufe (es löscht einen DB-Eintrag), aber wenn ich genau dasselbe einfügeafter()
, löscht es zudescribe()...it()
Beginn einer Sekunde nichts und schlägt fehl, weil die Daten nicht entfernt werden.