2011-08-25 3 views
0

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?

Répondre

2

L'astuce que j'utilise est de faire ces configurations/démontages dans des lots séparés avant d'exécuter vos tests dans un lot suivant.

Il semble fonctionner pour moi (j'utilise aussi les vœux et Mongo)

+0

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. –

+0

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

Questions connexes