2017-07-04 1 views
1

Est-ce la bonne façon de faire plusieurs enlèvement de la collection le premier ou le second? Je pense que c'est le second mais le premier est plus facile à utiliser. Est-il possible d'utiliser la promesse pour faciliter la lecture du code?La bonne façon de cascade création/suppression de collection dans mongoose

Première façon:

beforeEach((done) => { 
    //Before each test we empty the database 

    //Remove Roles 
    Role.remove({}, (err) => {}); 

    //Remove Users 
    User.remove({}, (err) => {}); 

    // Remove Workouts 
    Workout.remove({}, (err) => {}); 

    // Create user 
    Role.create({"name" : "Administrator"},(err, adminRole) => { 
     User.create({ firstname : "***", businessId: "1", lastname : "***", email : "***", roles:[adminRole]}, (err) => { 
      done();    
     }); 
    }); 
});` 

Deuxième moyen:

beforeEach((done) => { 
    //Before each test we empty the database 

    //Remove Roles 
    Role.remove({}, (err) => { 
     //Remove Users 
     User.remove({}, (err) => { 
      // Remove Workouts 
      Workout.remove({}, (err) => { 
       // Create user 
       Role.create({"name" : "Administrator"},(err, adminRole) => { 
        User.create({ firstname : "***", businessId: "1", lastname : "***", email : "***", roles:[adminRole]}, (err) => { 
         done();    
        }); 
       }); 
      }); 
     }); 
    }); 
}); 

Répondre

2

La deuxième option est la plus sûre, parce que si une erreur se produit lors d'une opération, les suivantes ne sont pas exécutées.

Et bien sûr, vous devriez utiliser des promesses. Le code devient plus propre:

Role.remove({}) 
    .then(() => User.remove({}) 
    .then(() => Workout.remove({}) 
    .then(() => Role.create({"name" : "Administrator"}) 
    .then((adminRole) => User.create({ firstname : "***", businessId: "1", lastname : "***", email : "***", roles:[adminRole]}) 
    .then(() => done()) 
    .catch((error) => ...); 

Pour pouvoir utiliser des promesses, vous pouvez définir le promise de mangouste être celui natif (tant que votre version de noeud est> = 6):

mongoose.Promise = global.Promise; 
+0

Merci Alberto. En effet, votre proposition avec Promise est plus sexy :-). Première question: si User.remove ({}) échoue, Workout.remove ({}) ne sera pas exécuté? –

+0

@oliviercherrier Oui, exactement. Si 'User.remove ({})' échoue, il va directement à 'catch' –

+0

Deuxième question: Qu'en est-il de la première asynchrone? Workout .remove est-il exécuté depuis la fin de User.remove() ou peut-il être exécuté avant la fin de User.remove? –