Wenn ich mit Mocha teste, habe ich oft eine Kombination aus sowohl asynchronen als auch synchronen Tests, die ausgeführt werden müssen.Wie kann Mocha warten und Timeout nur mit meinen asynchronen Tests?
Mocha behandelt dies schön, so dass ich einen Rückruf, done
, angeben kann, wenn meine Tests asynchron sind.
Meine Frage ist, wie überwacht Mocha intern meine Tests und weiß, dass es auf asynchrone Aktivität warten sollte? Es scheint zu warten, wenn ich den Callback-Parameter in meinen Testfunktionen definiert habe. Sie können in den folgenden Beispielen sehen, der erste Test sollte Timeout, der zweite sollte fortfahren und beenden, bevor user.save
die anonyme Funktion aufruft.
// In an async test that doesn't call done, mocha will timeout.
describe('User', function(){
describe('#save()', function(){
it('should save without error', function(done){
var user = new User('Luna');
user.save(function(err){
if (err) throw err;
});
})
})
})
// The same test without done will proceed without timing out.
describe('User', function(){
describe('#save()', function(){
it('should save without error', function(){
var user = new User('Luna');
user.save(function(err){
if (err) throw err;
});
})
})
})
Ist diese node.js spezifische Magie? Ist das etwas, das in jedem Javascript getan werden kann?
Das ist richtig, mit dem genauen Beispiel. Sehen Sie sich die Antwort von George unten an, um die Dokumentation zur Längenfunktion für Funktionen zu sehen. –