Comment puis-je faire Moka charge un helper.js fichier qui définit mondial des crochets ou des services publics?
J'ai un fichier nommé test/helper.js
que j'utilise pour exécuter Moka tests sur ma Node.js des apps. Mes tests de la structure ressemble à:
test/
test/helper.js # global before/after
test/api/sometest.spec.js
test/models/somemodel.spec.js
... more here
Le fichier helper.js
doit être chargé, car il contient mondial des crochets pour mon test de suite. Quand je lance Moka pour exécuter l'ensemble de la suite de test comme ceci:
mocha --recursive test/
la helper.js
fichier est chargé avant mes tests et mon before
crochet est exécuté comme prévu.
Cependant, lorsque je lance juste un test spécifique, helper.js
n'est pas chargé avant le test. C'est la façon dont je le lance:
mocha test/api/sometest.spec.js
Aucun before
appelé, pas même une console.log('I WAS HERE');
.
Alors, comment puis-je obtenir Moka à toujours charger mon helper.js
fichier?
- Avec la modification de la question, la réponse maintenant moins de sens.
Vous devez vous connecter pour publier un commentaire.
Moka n'a pas de notion d'un fichier spécial nommé
helper.js
qu'il serait de charger avant les autres fichiers.Ce que vous essayez de faire des oeuvres lorsque vous exécutez
mocha --recursive
en raison de l'ordre dans lequel Moka arrive pour charger vos fichiers. Parce quehelper.js
est d'un niveau plus élevé que les autres fichiers, il est chargé en premier. Lorsque vous spécifiez un fichier individuel à Moka, puis Moka juste des charges ce fichier et, comme vous l'avez découvert, votrehelper.js
fichier n'est pas chargé du tout.Donc ce que vous voulez faire est de charger un fichier tel qu'il sera défini plus haut ("global") crochets (par exemple,
before
,after
, etc.). Options:Vous pouvez utiliser Moka par programmation et nourrir les fichiers dans l'ordre que vous voulez.
Vous pourrait vous forcer à toujours spécifier votre assistant de fichier sur la ligne de commande première avant de vous liste tout autre fichier. (Je ne voudrais pas faire cela, mais il est possible.)
Une autre option serait d'organiser votre suite comme je l'ai détaillé dans cette réponse. Fondamentalement, vous avez un "haut niveau" de fichier qui charge le reste de la suite en elle. Avec cette méthode, vous perdez la capacité de l'exécution de Moka sur des fichiers individuels, mais vous pouvez utiliser
--grep
de choisir ce qui est en cours d'exécution.Vous ne peut pas utiliser le
-r
option. Il charge un module avant de lancer la suite de tests, mais, malheureusement, le chargement du module n'a pas accès à l'interface de test qui Moka met à la disposition de vos tests, donc il est impossible de définir des crochets.test
dossier (avec mondial crochets, etc.), j'.ehelper.js
et tous les autres fichiers de test à l'intérieur d'un sous-répertoire, c'est à direunit
? (mise à Jour: Ah, il semble que la réponse que je cherche est déjà partie de la question -> oui.:) )mocha
sans arguments (ce que l'OP déjà le sait et le comprend). J'ai juste parlé de la façon dont vous pourriez faire le travail si vous voulez exécuter un seul fichier spécifique:mocha test/helper.js [whatever other file]
.spec
quelque part dans le nom?jasmine
, droit? Pas de moka. Je suis bête.Ce que j'ai à faire est de créer un
test/test_helper.js
fichier, qui exporte tous les aides-je créer:Puis je
require
l'aide sur n'importe quel test, j'ai besoin de l'utiliser:Je préfère l'approche ci-dessus parce qu'elle est facile à comprendre et flexible. Vous pouvez le voir en action ici, dans ma démonstration: https://github.com/paulredmond/karma-browserify-demo/tree/master/test
Tout d'abord, je n'hésiterais pas à utiliser
mocha.opts
de sorte que vous n'avez pas à inclure les options que vous voulez à chaque fois. Comme l'a souligné, une option est d'utiliser--grep
, mais je ne suis pas un grand fan de cette personne. Il nécessaire de vous nom le tout dans une façon trop simpliste. Si lebefore
crochet n'est PAS async vous pouvez utiliser--require
dans votremocha.opts
. par exemple,Il semble que cela ne serait pas travailler pour vous parce que vous voulez mondiale
after
crochet ainsi. Ce que j'ai fait est je viens d'appeler la suite de tests complète à chaque fois, mais si je suis dans le milieu de deving et ne veulent tester une suite, ou même un test, j'utilise l'exclusivité de fonction,only
https://mochajs.org/#exclusive-tests. Vous pouvez le faireit.only('...
oudescribe.only('...
Si vous faites cela, il regarde à travers tous les tests et met en place exactement comme votre l'essai complet harnais serait, mais alors seulement exécute le test ou la suite que vous avez spécifié.Maintenant, vous pouvez inclure ces mondiaux crochets à pas de problème. @Louis mentionne que votre
helpers.js
sont en cours de chargement dans le bon ordre, seulement une coïncidence. Ce n'est pas vrai. Si vous placez toutes les crochets à l'extérieur d'undescribe
bloc, il devient automatiquement un hook global. Ceci peut être accompli soit par le mettre dans son propre fichierou dans un fichier de test
Bien sûr, je pense le mettre dans un fichier qui lui est propre. (Je l'ai appelé
hooks.js
). Le Point est, ce n'est pas un résultat de l'ordre dans lequel les fichiers ont été chargés.Juste un piège qui pourrait être évidente pour les autres mais j'ai du mal avec brièvement -- crochets ne sont pas placées dans un
describe
bloc sont TOUS mondiale. Ils ne sont pas de répertoire spécifique. Donc, si vous copiezhelpers.js
dans un sous-répertoire de tests, labefore
etafter
crochet va maintenant se déclencher deux fois. Aussi, si vous placez unbeforeEach
crochet là, il aura le feu avant chaque test, et pas seulement ceux des tests dans ce répertoire.De toute façon, je sais que ce post est un peu vieux, mais j'espère que cela aidera d'autres personnes ayant des problèmes similaires.
helper.js
serait automatiquement appelait, c'était mon problème.Je suis venu à cette question après avoir essayé toutes sortes de choses pour obtenir mes tests pour connecter une fois à une base de données par la suite de l'exécution d'un tas de
crud
tests sur mamodels
.Puis j'ai trouvé moka-préparer qui a résolu mon problème.
Dans votre
helper.js
fichier, il vous suffit de définir unprepare
fonction.fonctionne un régal.
Dans notre projet, nous utilisons les aides à peu près comme ceci:
Vous avez besoin pour configurer le chemin d'accès relatif de votre aide correctement.
Puis de l'appeler comme ceci: