Функция Async в mocha before() всегда заканчивается перед() spec?

У меня есть функция обратного вызова в before(), которая предназначена для очистки базы данных. Заканчивается ли все before() до завершения it()?

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(){
});

Ответ 1

Если вы хотите, чтобы ваш асинхронный запрос был завершен до того, как все остальное произойдет, вам нужно использовать параметр done в вашем запросе перед запросом и вызвать его в обратном вызове.

Mocha будет ждать до вызова done, чтобы начать обработку следующих блоков.

before(function (done) {
   db.collection('user').remove({}, function (res) { done(); }); // It is now guaranteed to finish before 'it' starts.
})

it('test spec', function (done) {
  // execute test
});

after(function() {});

Однако вы должны быть осторожны, так как не завершение базы данных для модульного тестирования может сильно замедлить выполнение, так как запросы в базе данных могут быть довольно длинными по сравнению с простым выполнением кода.

Для получения дополнительной информации см. документацию Mocha.