web-dev-qa-db-fra.com

Nettoyage de la base de données de test avant d'exécuter des tests

Quel est le meilleur moyen de nettoyer une base de données avant d'exécuter une suite de tests (existe-t-il une bibliothèque npm ou une méthode recommandée pour le faire)?.

Je connais la fonction before ().

J'utilise node/express, moka et séquellize.

20
robzolkos

La fonction before est à peu près aussi efficace que vous le ferez pour nettoyer votre base de données. Si vous devez uniquement nettoyer la base de données une fois, c'est-à-dire avant d'exécuter tous vos tests, vous pouvez avoir une fonction globale before dans un fichier séparé.

globalBefore.js

before(function(done) {
   // remove database data here
   done()
}) 

single-test-1.js

require('./globalBefore)
// actual test 1 here

single-test-2.js

require('./globalBefore)
// actual test 2 here

Notez que le globalBefore ne fonctionnera qu'une fois, même s'il a été requis deux fois.

Principes de test

Essayez de limiter l'utilisation de dépendances externes telles que des bases de données dans vos tests. Moins il y a de dépendances externes, plus les tests sont faciles. Vous voulez pouvoir exécuter tous vos tests unitaires en parallèle et une ressource partagée telle qu'une base de données rend cela difficile.

Jetez un coup d’œil à cet article de Google Tech sur la rédaction de javascript testable http://www.youtube.com/watch?v=JjqKQ8ezwKQ

Regardez également le module rewire . Cela fonctionne assez bien pour écraser des fonctions.

26
Noah

Je le fais habituellement comme ceci (par exemple pour un modèle User):

describe('User', function() {
  before(function(done) {
    User.sync({ force : true }) // drops table and re-creates it
      .success(function() {
        done(null);
      })
      .error(function(error) {
        done(error);
      });
  });

  describe('#create', function() {
    ...
  });
});

Il y a aussi sequelize.sync({force: true}) qui supprimera et recréera all tables (.sync() est décrit ici ).

17
robertklep

J'ai fait cette bibliothèque pour nettoyer et importer des fixtures pour votre test.

De cette façon, vous pouvez importer des fixtures, tester puis nettoyer votre base de données.

Jetez un oeil à ce qui suit:

before(function (done) {
   prepare.start(['people'], function () {
      done();
   });
});

after(function () {
   prepare.end();
});

https://github.com/diogolmenezes/test_prepare

0
Diogo Menezes