Utilisation de Vows/Coffeescript/Mongoose et exécution dans un problème asynchrone avec DB. Avant de lancer mes tests, je fais beaucoup de réglages, y compris la purge de la base de données de test. Une fois que j'ai appelé supprimer sur le dernier document, je déclenche le rappel afin que les vœux puissent passer à l'étape suivante du test. Le problème est qu'il n'y a aucune garantie que la base de données aura été purgée puisque les choses arrivent async. Dans ce cas, je veux vraiment synchroniser mais je ne suis pas sûr de savoir comment y arriver.Tests asynchrones avec vœux et Mongoose
Voici le code (snippet Serment et la définition de la fonction de purge):
'AND the test database is empty':
topic: ->
testDB.purge "widgets_test", @callback
purge = (database, callback) ->
db = mongoose.connect "mongodb://localhost/#{database}"
modelCount = Models.length
for model in Models
modelCount--
model.find {}, (err, docs) ->
docCount = docs.length
for doc in docs
doc.remove (err) ->
docCount--
# do callback after all data has been purged - setTimeout HACKHACKHACK
if modelCount is 0 and docCount is 0
setTimeout ->
callback()
, 100
Quelle est la bonne façon de le faire?
Ouais, ce n'est pas une mauvaise solution pour déterminer que les choses fonctionnent de façon séquentielle. Mais dans l'exemple ci-dessus sans le hack setTimeout, vous pouvez déjà passer à vos tests avant que la base de données ait été purgée. Supposons que vous puissiez retravailler des choses à fireoff callback() dans le cadre du callback doc.remove, après vous être assuré de supprimer le dernier document du dernier modèle. Mais c'est toujours moche. –
Vous devez déclencher un rappel pour vous assurer que le lot a été exécuté et terminé. C'est moche, mais certaines des questions de travail asynchrone. – theprogrammer