2017-10-17 24 views
0

J'ai un « avant » crochet que je veux courir avant tous les tests (fichiers), la situation idéale serait courir une fois et une seule fois, peu importe le nombre de cas de test et qui cas d'essai je cours.avant crochet avant tous les cas de test dans Mocha

Maintenant, ce que je ne mettais que est « avant » crochet dans un fichier séparé, et faire « require (» beforeAll.js ../ «) » au début de chaque fichier de test,

//beforeAll.js 
before('description', function(done) { 
    //do something 
    done() 
} 


//all test files 
require('../beforeAll.js') 
//test 
//...... 

Je pense que le hook "avant" sera exécuté chaque fois qu'un fichier de test sera exécuté, mais je ne connais pas de meilleure façon de le faire. Cependant, lorsque je lance tous les cas de test, le hook "avant" ne s'exécute qu'une seule fois.

Donc, ma question est, pourquoi le crochet "avant" ne fonctionne qu'une seule fois? Quelle est la meilleure façon de le faire dans ce scénario (seulement exécuter une fois)?

Répondre

1

Selon MochaJS's documentation on hooks:

before(function() {}) fonctionne avant tous tests dans le bloc.
beforeEach(function() {}) exécute avant chaque de test dans le bloc.

Si vous voulez exécuter une fonction singulière au début de vos tests, utilisez before(). Si vous souhaitez exécuter une fonction avant chacun de vos tests, utilisez beforeEach(). Lorsque vous utilisez require(), vous incluez essentiellement cette logique dans le test en cours, comme si vous copiez-collez le fichier requis. Considérant que vous faites usage de before(), il s'exécute dans le premier test. Quand vient le temps du deuxième test, il voit que before() a déjà été exécuté, il n'est donc pas exécuté à nouveau.

Espérons que cela aide! :)

+0

Merci, donc si je veux l'exécuter avant chaque fichier de test, je devrais faire le fichier requis avantEach? Y a-t-il une meilleure façon de le faire au lieu de mettre require dans chaque fichier? – Keming

+0

Oui, si vous vouliez le faire avant chaque test, vous feriez un 'beforeEach()' dans le fichier requis. ** Personnellement ** si j'utilisais un 'beforeEach()' au lieu d'un 'before()', je l'aurais dans chacun des fichiers de test. Cela conduit à dupliquer le code, mais il souligne que le 'beforeEach()' est unique à cet ensemble de tests. De toute façon fonctionne bien, et le choix de l'endroit où vous stockez le code est à vous. Rappelez-vous simplement que 'require()' ressemble beaucoup à un PHP 'include()'; Il suffit simplement de copier le contenu du fichier A dans le fichier B :) –

+0

Oh, je pense que beforeEach() s'exécutera avant chaque test CAS, mais pas avant chaque test FILE, alors y a-t-il un moyen de faire avant chaque fichier? – Keming