Réponses:
Modifier: cette option est déconseillée: https://mochajs.org/#mochaopts
Si vous voulez le faire en exécutant toujours simplement mocha
sur la ligne de commande, mais que vous vouliez 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 souhaitez tout exécuter dans ce dossier et sous-répertoires, placez-le dans test/mocha.opts
server-tests
--recursive
mocha.opts
sont les arguments transmis via la ligne de commande, donc faire de la première ligne uniquement le répertoire dont vous souhaitez modifier les tests redirigera ./test/
mocha.opts
fichier peut être placé où vous le souhaitez, puis exécutez simplement en mocha
spécifiant le chemin d'accès à son fichier de configuration par exemple:mocha --opts ./mocha.opts
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 les tests dans les sous-répertoires.
mocha test/server-test
mocha ./**/*.test.js
(donc je peux colocaliser le fichier de test avec le fichier de module). Le modèle a cessé de fonctionner pour moi lorsque j'ai ajouté un fichier de test à un niveau différent dans la hiérarchie des fichiers que les autres tests, et ne trouverait qu'un fichier de boule impair et pas la douzaine d'autres qui vivaient au même niveau dans la hiérarchie . L'emballage entre guillemets l'a corrigé.
--recursive
comme je l'explique ci
Voici une façon, si vous avez des sous-dossiers dans votre dossier de test, par exemple
/test
/test/server-test
/test/other-test
Ensuite, sous Linux, vous pouvez utiliser la commande find pour répertorier tous les fichiers * .js de manière récursive et les transmettre à mocha:
mocha $(find test -name '*.js')
--recursive
comme je l'explique ci
mocha
n'a-t-il aucune option pour définir la structure de répertoires souhaitée dans la configuration?
La bonne façon de le faire est d'ajouter 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. Cela évite également tous ces problèmes multiplateformes dans les autres réponses (guillemets doubles ou simples, "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 normaliser l'exécution de tous les tests dans tous les projets de cette façon, donc 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 une bonne préséance historique pour cela (Maven, par exemple, la plupart des projets de "vieille école" aussi). Cela aide certainement CI lorsque tous les projets ont la même commande de test.
De même, vous pouvez avoir un sous-ensemble de tests de fumée plus rapides que vous voudrez peut-être exécuter mocha:
"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 qu'ils testent, 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 exécuter tous les tests, appelez:
npm test
Voir le motif ici? Bien. :) La cohérence bat Mura .
N'utilisez pas l'option -g ou --grep, ce modèle fonctionne 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 comme 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 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
Si dans node.js , quelques 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 une mocha
propriété dans le projet package.json
:
{
...
"mocha": {
"spec": "path/to/test/files"
}
}
Plus d'options sont ici .
Exécutez tous les fichiers dans les test_directory
sous-répertoires qui correspondenttest.js
find ./parent_test_directory -name '*test.js' | xargs mocha -R spec
ou utilisez l' --recursive
interrupteur
mocha --recursive test_directory/
J'ai eu ce problème tout à l'heure et l'ai résolu en supprimant l' --recursive
option (que j'avais définie) et en utilisant la même structure 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/
Maintenant, en quelques jours (année 2020), vous pouvez gérer cela en utilisant le fichier de configuration mocha :
Étape 1: créer un fichier .mocharc.js à l' emplacement racine de votre application
Étape 2: Ajoutez le code ci-dessous dans le fichier de configuration mocha:
'use strict';
module.exports = {
spec: 'src/app/**/*.test.js'
};
Pour plus d'options dans le fichier de configuration, reportez-vous à ce lien: https://github.com/mochajs/mocha/blob/master/example/config/.mocharc.js
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 de chemin / unité pour trouver mes tests, Après avoir passé trop de temps et essayé plusieurs choses, j'ai atterri,
L'utilisation de l'option "test / unit / *. Js" ne fonctionne pas sous Windows. Pour de bonnes raisons, le shell Windows ne développe pas les caractères génériques comme Unixen.
Cependant, l'utilisation de "test / unit" fonctionne, sans le modèle de fichier. par exemple. "mocha test / unit" exécute tous les fichiers trouvés dans le dossier test / unit.
Cela n'exécute toujours qu'un fichier de dossiers en tant que tests, mais vous pouvez passer plusieurs noms de répertoire en tant que paramètres.
Pour exécuter un seul fichier de test, vous pouvez également spécifier le chemin d'accès complet et le nom du fichier. par exemple. "test mocha / unité / mytest1.js"
En fait, je configure dans package.json pour les "scripts" npm: {"test": "mocha test / unit"},
Donc, ce «test npm» exécute mes tests unitaires.
--recursive
option comme suit:mocha --recursive "some_dir"
node_modules\.bin\mocha "test\unit\*.js"
œuvres sous Windows. Fonctionne également node_modules\.bin\mocha "**\*.js"
(mon cas réel). Mais je cherche un moyen d'exclure le répertoire node_modules . (J'utilise aussi gulpfile.js mais je dois parfois lancer le test directement avec mocha)
Si vous utilisez nodejs
, dans votre package.json
sousscripts
global (-g)
installations: "test": "mocha server-test"
ou"test": "mocha server-test/**/*.js"
pour les sous-documentsproject
installations: "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 comme npm test
npm run mocha "./test/*.spec.js!(~)"
ignore l'argument glob, mais node_modules/.bin/mocha "./test/*.spec.js!(~)"
non.
npm run mocha -- yourArgs
Cela ne semble pas être un support "facile" pour changer de répertoire de test.
Cependant, vous devriez peut-être jeter un œil à ce problème , par rapport à votre question.
Comme l'a suggéré @ jeff-dickey, à la racine de votre projet, créez un dossier appelé test
. Dans ce dossier, créez un fichier appelé mocha.opts
. Maintenant, lorsque j'essaie d'améliorer la réponse de Jeff, ce qui a fonctionné 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 les 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
.only
et.skip
gérer les tests que vous sont en train de courir. Important lors du développement d'une fonctionnalité spécifique lorsque vous ne voulez pas attendre que toute la suite de tests s'exécute en permanence.