Когда я тестирую Mocha, у меня часто есть комбинация асинхронных и синхронных тестов, которые нужно запустить.
Mocha обрабатывает это прекрасно, позволяя мне указать обратный вызов done
, когда мои тесты асинхронны.
Мой вопрос: как Mocha внутренне наблюдает мои тесты и знает, что он должен ждать асинхронной активности? Кажется, я жду в любое время, когда у меня есть параметр обратного вызова, определенный в моих тестовых функциях. Вы можете видеть в примерах ниже, первый тест должен быть тайм-аутом, второй должен продолжаться и заканчиваться до того, как 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?