Comment spécifier le répertoire de test pour moka?

Mocha tente de trouver des fichiers de test par défaut, comment puis-je spécifier un autre répertoire, par exemple server-test ?

Voici un moyen, si vous avez des sous-dossiers dans votre dossier de test, par exemple

 /test /test/server-test /test/other-test 

Dans Linux, vous pouvez utiliser la commande find pour lister tous les fichiers * .js de manière récursive et la transmettre à mocha:

 mocha $(find test -name '*.js') 

Utilisez ceci:

 mocha server-test 

Ou si vous avez des sous-répertoires, utilisez ceci:

 mocha "server-test/**/*.js" 

Notez l’utilisation de guillemets doubles. Si vous les omettez, vous ne pourrez peut-être pas exécuter de tests dans les sous-répertoires.

Si vous voulez le faire en lançant simplement mocha sur la ligne de commande, mais que vous voulez exécuter les tests dans un dossier ./server-tests au lieu de ./test , créez un fichier à ./test/mocha.opts avec juste ceci dans le fichier:

 server-tests 

Si vous voulez tout exécuter dans ce dossier et ses sous-répertoires, mettez-le dans test/mocha.opts

 server-tests --recursive 

mocha.opts sont les arguments transmis via la ligne de commande, ce qui fait que la première ligne, c’est-à-dire le répertoire que vous souhaitez modifier, sera également redirigée depuis ./test/

N’utilisez pas l’option -g ou –grep, ce modèle opère sur le nom du test à l’intérieur (), pas sur le système de fichiers. La documentation actuelle est trompeuse et / ou totalement erronée à ce sujet. Pour limiter la commande entière à une partie du système de fichiers, vous pouvez passer un motif en dernier argument (ce n’est pas un drapeau).

Par exemple, cette commande définira votre reporter sur spec mais ne testera que les fichiers js immédiatement à l’intérieur du répertoire server-test:

 mocha --reporter spec server-test/*.js 

Cette commande fera la même chose que ci-dessus, en plus elle exécutera uniquement les cas de test où la chaîne / définition it () d’un test commence par “Fnord:”:

 mocha --reporter spec --grep "Fnord:" server-test/*.js 

Exécutez tous les fichiers dans test_directory y compris les sous-répertoires correspondant à test.js

 find ./parent_test_directory -name '*test.js' | xargs mocha -R spec 

ou utilisez le commutateur --recursive

 mocha --recursive test_directory/ 

J’ai eu ce problème tout à l’heure et l’ --recursive résolu en supprimant l’option --recursive (que j’avais définie) et en utilisant la même structure suggérée ci-dessus:

mochify "test/unit/**/*.js"

Cela a conduit tous les tests dans tous les répertoires sous /test/unit/ pour moi en ignorant les autres répertoires dans /test/

Je suis sur Windows 7 en utilisant node.js v0.10.0 et mocha v1.8.2 et npm v1.2.14. J’essayais juste d’obtenir du moka pour utiliser le test / unité du chemin pour trouver mes tests, après avoir passé beaucoup de temps à essayer plusieurs choses, j’ai atterri,

L’utilisation de l’option “test / unit / *. Js” ne fonctionne pas sur Windows. Pour de bonnes raisons, Windows Shell ne développe pas les caractères génériques comme unixen.

Cependant, l’utilisation de “test / unit” ne fonctionne pas sans le motif de fichier. par exemple. “moka test / unit” exécute tous les fichiers trouvés dans le dossier test / unit.

Cela ne fait qu’exécuter un fichier de fichiers en tant que tests, mais vous pouvez transmettre plusieurs noms de répertoire en tant que parameters.

Pour exécuter un seul fichier de test, vous pouvez également spécifier le chemin d’access complet et le nom du fichier. par exemple. “test de moka / unit / mytest1.js”

Je mets en place dans package.json pour npm “scripts”: {“test”: “moka test / unit”},

Ainsi, le “test npm” exécute mes tests unitaires.

Si vous utilisez nodejs , dans votre package.json sous des scripts

  1. Pour global (-g) installations global (-g) : "test": "mocha server-test" ou "test": "mocha server-test/**/*.js" pour les sous documents
  2. Pour les installations de project : "test": "node_modules/mocha/bin/mocha server-test" ou "test": "node_modules/mocha/bin/mocha server-test/**/*.js" pour les sous-documents

Ensuite, exécutez vos tests normalement comme npm test

La bonne façon de faire est d’append un script npm “test” dans package.json qui appelle mocha avec les bons arguments. De cette façon, votre package.json décrit également votre structure de test. Il évite également toutes ces questions multi-plateformes dans les autres réponses (guillemets simples ou doubles, “trouver”, etc.)

Pour que mocha exécute tous les fichiers js dans le répertoire “test”:

 "scripts": { "start": "node ./bin/www", -- not required for tests, just here for context "test": "mocha test/**/*.js" }, 

Ensuite, pour exécuter uniquement les tests de fumée, appelez:

 npm test 

Vous pouvez standardiser le fonctionnement de tous les tests dans tous les projets de cette manière. Ainsi, lorsqu’un nouveau développeur démarre un projet ou un autre, il sait que “npm test” exécutera les tests. Il y a une bonne préséance historique pour cela (Maven, par exemple, la plupart des projets de «vieilles» écoles). Cela aide certainement les CI lorsque tous les projets ont la même commande de test.

De même, vous pourriez avoir un sous-ensemble de tests “fumée” plus rapides que vous pourriez souhaiter que mocha exécute:

 "scripts": { "test": "mocha test/**/*.js" "smoketest": "mocha smoketest/**/*.js" }, 

Ensuite, pour exécuter uniquement les tests de fumée, appelez:

 npm smoketest 

Un autre modèle courant consiste à placer vos tests dans le même répertoire que la source testée, mais appelez les fichiers de test * .spec.js. Par exemple: src / foo / foo.js est testé par src / foo / foo.spec.js.

Pour exécuter tous les tests nommés * .spec.js par convention:

  "scripts": { "test": "mocha **/*.spec.js" }, 

Ensuite, pour lancer tous les tests, appelez:

 npm test 

Voir le modèle ici? Bien. 🙂 La constance défait Mura .

Cela ne semble pas être un support “facile” pour changer de répertoire de test.
Cependant, vous devriez peut-être examiner cette question , par rapport à votre question.

Comme mentionné par @superjos dans les commentaires utiliser

mocha --recursive "some_dir"

Comme @ jeff-dickey a suggéré, à la racine de votre projet, créez un dossier appelé test . Dans ce dossier, créez un fichier appelé mocha.opts . Maintenant que j’essaie d’améliorer la réponse de Jeff, ce qui a marché pour moi, au lieu de spécifier le nom d’un seul dossier de test, j’ai spécifié un modèle pour trouver tous les tests à exécuter dans mon projet en ajoutant cette ligne:

*/tests/*.js --recursive dans mocha.opts

Si vous souhaitez plutôt spécifier les dossiers exacts dans lesquels rechercher des tests, j’ai fait quelque chose comme ceci:

 shared/tests/*.js --recursive server/tests/graph/*.js --recursive 

J’espère que cela aide quiconque a besoin de plus que ce que les autres réponses fournissent