1
votes

Comment détecter tous les tests (dans plusieurs fichiers) terminés

Je voudrais supprimer la base de données après l'exécution de tous les tests de tous les fichiers. Y a-t-il un crochet pour cela dans Mocha?

after () hook ne peut être appliqué que dans un seul fichier.


0 commentaires

3 Réponses :


0
votes

J'utilise process.on ('exit') . Cela fonctionne lors de l'exécution d'un seul fichier ainsi que lors de l'exécution de tests à partir de package.json .

database.mocha-base.js:

const dbMochaBase = require('./path/to/database.mocha-base.js')

describe('Tests', () => {
   dbMochaBase.applyHooks()

   ...
})

J'inclus database.mocha-base.js dans tous les tests nécessitant une base de données accès:

db.connect()

process.on('exit', async () => {
  console.log('All tests finished. Droping database')
  db.dropDatabase(dbName)
  db.disconnect()
})

module.exports = {
  applyHooks() {
     before(async () => {
        // truncate tables
     })
  }
}


5 commentaires

Cela ne bloque-t-il pas le processus de sortie?


@NikKyriakides pouvez-vous s'il vous plaît m'expliquer ce que vous entendez par «suspendre le processus de sortie»?


empêcher le processus de se terminer


Je suis généralement juste un gars empirique et ça ne me tient pas debout dans ce cas.


Je l'ai; Je ne savais pas si c'était le cas, je demandais simplement.



1
votes

Créez un fichier parent qui inclut / nécessite tous les autres tests, puis utilisez après dans ce fichier:

describe('User', () => {
  require('../user/user.spec.js')
})

describe('Post', () => {
  require('../post/post.spec.js')
})

describe('Tag', () => {
  require('../tag/tag.spec.js')
})

describe('Routes', () => {
  require('./routes.spec.js')
})

after(() => {
  // drop database
})


3 commentaires

Plus propre que process.on ('exit') mais me semble un peu plus complexe car je devrais me rappeler d'ajouter les suites de tests. Une excellente idée quand même! +1


Je suis curieux, puisque vous exécutez plusieurs fichiers de test, dans quel fichier de test mettez-vous le gestionnaire process.on ('exit') ? Le dernier qui court?


J'ai mis à jour ma réponse ( stackoverflow.com/a/54289273/1075289 ) pour montrer comment je l'utilise dans plusieurs fichiers.



1
votes

Il existe un hook au niveau racine en moka. Pour votre cas, vous pouvez créer un nouveau fichier et spécifier la commande drop database dans la fonction after . Voilà!

// init-test.js

after(function() {
  // drop database
});

Vous n'avez pas besoin de déplacer de test dans un autre fichier de test pour cette solution.

Référence: https://mochajs.org/#root-level-hooks


0 commentaires