Mocha でテストしているとき、実行する必要がある非同期テストと同期テストの両方を組み合わせることがよくあります。
done
Mocha はこれを見事に処理し、テストが非同期のときはいつでもコールバックを指定できるようにします。
私の質問は、Mocha はどのようにして私のテストを内部的に監視し、非同期アクティビティを待機する必要があることを認識しているのかということです。テスト関数で定義されたコールバック パラメータがあるときはいつでも待機しているようです。以下の例でわかるように、最初のテストはタイムアウトし、2 番目のテストは続行しuser.save
て無名関数を呼び出す前に終了する必要があります。
// 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;
});
})
})
})
これはnode.js固有の魔法ですか? これはどのJavascriptでもできることですか?