Mocha essaie de trouver des fichiers de test sous test
par défaut, comment puis-je spécifier un autre répertoire, par exemple. server-test
?
Si vous voulez le faire en exécutant toujours mocha
sur la ligne de commande, mais que vous souhaitez 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 ces sous-répertoires, mettez ceci dans test/mocha.opts
server-tests
--recursive
mocha.opts
sont les arguments transmis via la ligne de commande. Par conséquent, la première ligne qui correspond au répertoire dans lequel vous souhaitez modifier les tests sera également redirigée à partir de ./test/
.
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 des sous-répertoires.
Voici un moyen, par exemple, si vous avez des sous-dossiers dans votre dossier de test.
/test
/test/server-test
/test/other-test
Ensuite, sous Linux, vous pouvez utiliser la commande find pour lister tous les fichiers * .js de manière récursive et le transmettre à mocha:
mocha $(find test -name '*.js')
N'utilisez pas l'option -g ou --grep, ce modèle agit sur le nom du test à l'intérieur de celui-ci (), pas sur le système de fichiers. La documentation actuelle est trompeuse et/ou carrément erronée à ce sujet. Pour limiter la commande entière à une partie du système de fichiers, vous pouvez passer un modèle en dernier argument (ce n'est pas un indicateur).
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, plus elle ne lancera que les cas de test où la chaîne/définition d'un test commence par "Fnord:":
mocha --reporter spec --grep "Fnord:" server-test/*.js
Pour ce faire, ajoutez un script "test" npm dans package.json qui appelle mocha avec les bons arguments. De cette façon, votre package.json décrit également votre structure de test. Cela évite également tous ces problèmes multi-plateformes dans les autres réponses (guillemets simples vs doubles, "trouver", etc.)
Pour que mocha exécute tous les fichiers js du 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 ainsi normaliser l'exécution de tous les tests dans tous les projets. Ainsi, lorsqu'un nouveau développeur démarre sur votre projet ou un autre, il sait que "npm test" exécutera les tests. Il y a de bons précédents historiques pour cela (Maven, par exemple, la plupart des projets "make" de la vieille école). Cela aide certainement CI lorsque tous les projets ont la même commande de test.
De même, vous pourriez avoir un sous-ensemble de tests de "fumée" plus rapides que vous voudriez peut-être lancer:
"scripts": {
"test": "mocha test/**/*.js"
"smoketest": "mocha smoketest/**/*.js"
},
Ensuite, pour exécuter uniquement les tests de fumée, appelez:
npm smoketest
Une autre méthode courante consiste à placer vos tests dans le même répertoire que la source testée, mais à appeler 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 cohérence défait mura .
Exécuter 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 je l'ai résolu en supprimant l'option --recursive
(que j'avais définie) et en utilisant la même structure que celle suggérée ci-dessus:
mochify "test/unit/**/*.js"
Cela a exécuté tous les tests dans tous les répertoires sous /test/unit/
pour moi tout en ignorant les autres répertoires dans /test/
Si dans node.js , certaines nouvelles configurations à partir de Mocha v6 :
Option 1: Créer .mocharc.json
dans le répertoire racine du projet:
_{
"spec": "path/to/test/files"
}
_
Option 2: ajouter mocha
propriété dans le projet package.json
:
_{
...
"mocha": {
"spec": "path/to/test/files"
}
}
_
Plus d'options sont ici .
Si vous utilisez nodejs
, dans votre package.json
sous scripts
global (-g)
: "test": "mocha server-test"
ou "test": "mocha server-test/**/*.js"
pour les sous-documentsproject
: "test": "node_modules/mocha/bin/mocha server-test"
ou "test": "node_modules/mocha/bin/mocha server-test/**/*.js"
pour les sous-documentsEnsuite, exécutez vos tests normalement en tant que npm test
Je suis sur Windows 7 avec node.js v0.10.0 et mocha v1.8.2 et npm v1.2.14. J'essayais juste de faire en sorte que le moka utilise le test de trajectoire pour trouver mes tests, après avoir passé trop de temps et avoir essayé plusieurs choses,
L'utilisation de l'option "test/unit/*. Js" ne fonctionne pas sous Windows. Pour de bonnes raisons, Windows Shell n'élargit pas les caractères génériques comme unixen.
Cependant, l'utilisation de "test/unit" fonctionne, sans le motif de fichier. par exemple. "mocha test/unit" exécute tous les fichiers contenus dans le dossier test/unit.
Cela n’exécute toujours que les fichiers d’un dossier en tant que tests, mais vous pouvez transmettre plusieurs noms de répertoire en tant que paramètres.
De plus, pour exécuter un seul fichier de test, vous pouvez spécifier le chemin complet et le nom du fichier. par exemple. "moka test/unit/mytest1.js"
En fait, je suis installé dans package.json pour npm "scripts": {"test": "mocha test/unit"},
Donc, ce 'test npm' exécute mes tests unitaires.
Comme mentionné par @superjos dans les commentaires, utilisez
mocha --recursive "some_dir"
Comme @ jeff-dickey l'a suggéré, à la racine de votre projet, créez un dossier appelé test
. Dans ce dossier, créez un fichier nommé mocha.opts
. Maintenant, là où j'essaie d'améliorer la réponse de Jeff, ce qui a fonctionné pour moi était que, 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 voulez 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 aidera tous ceux qui ont besoin de plus que ce que les autres réponses fournissent
Cela ne semble pas être un support "facile" pour changer de répertoire de test.
Cependant, vous devriez peut-être jeter un œil à ce numéro , par rapport à votre question.