J'ai une fonction de rappel dans before()
laquelle est pour nettoyer la base de données. Tout est-il before()
garanti pour finir avant le it()
début?
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(){
});
javascript
asynchronous
mocha
Nicolas S.Xu
la source
la source
before
gestionnaire. Egbefore(function () { return db.collection...}
Réponses:
Pour les nouvelles versions moka:
Vous pouvez maintenant retourner une promesse au moka, et moka attendra qu'elle se termine avant de continuer. Par exemple, le test suivant réussira:
Vous pouvez trouver la documentation ici
Pour les anciennes versions de moka:
Si vous souhaitez que votre demande asynchrone soit terminée avant que tout le reste ne se produise, vous devez utiliser le
done
paramètre dans votre demande avant et l'appeler dans le rappel.Mocha attendra alors d'
done
être appelé pour commencer à traiter les blocs suivants.Vous devez cependant faire attention, car ne pas stubbing la base de données pour les tests unitaires peut fortement ralentir l'exécution, car les requêtes dans une base de données peuvent être assez longues par rapport à une simple exécution de code.
Pour plus d'informations, consultez la documentation Mocha .
la source
done
. Renvoyez simplement une promesse.before(function () { return db.collection('user').remove({}); })
depuisremove()
renvoie une promesse, pas besoin de l'envelopper dans unnew Promise()
Espérons que votre db.collection () devrait renvoyer une promesse. Si oui, vous pouvez également utiliser le mot-clé async dans before ()
la source
after()
? Monawait
fonctionne bien lorsque je l'appellebefore()
(il supprime une entrée de base de données), mais si je mets exactement la même choseafter()
, il ne supprime rien au moment où une secondedescribe()...it()
commence et échoue en raison de la non suppression des données.