La fonction asynchrone au mocha avant () est toujours terminée avant elle () spec?

J'ai une fonction de rappel dans before() qui sert à nettoyer la base de données. Est-ce que tout en before() garanti pour finir avant it() commence?

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

Si vous souhaitez que votre demande asynchrone soit complétée avant que tout ne se produise, vous devez utiliser le paramètre done dans votre demande précédente et l'appeler dans le rappel.

Mocha attendra jusqu'à ce que done soit appelé pour commencer à traiter les blocs suivants.

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

Vous devriez cependant être prudent, car ne pas décompresser la base de données pour les tests unitaires peut ralentir considérablement l'exécution, car les requêtes dans une base de données peuvent être assez longues par rapport à l'exécution simple du code.

Pour plus d'informations, consultez la documentation Mocha .