Réponses:
Modifier: cette option est déconseillée: https://mochajs.org/#mochaopts
Si vous voulez le faire en exécutant toujours simplement mochasur la ligne de commande, mais que vous vouliez exécuter les tests dans un dossier ./server-testsau lieu de ./test, créez un fichier ./test/mocha.optsavec 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.optsfichier peut être placé où vous le souhaitez, puis exécutez simplement en mochaspé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é.
--recursivecomme 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')
--recursivecomme je l'explique ci
mochan'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.jsondans le répertoire racine du projet:
{
"spec": "path/to/test/files"
}
Option 2: ajouter une mochaproprié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_directorysous-répertoires qui correspondenttest.js
find ./parent_test_directory -name '*test.js' | xargs mocha -R spec
ou utilisez l' --recursiveinterrupteur
mocha --recursive test_directory/
J'ai eu ce problème tout à l'heure et l'ai résolu en supprimant l' --recursiveoption (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.
--recursiveoption 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.jsonsousscripts
global (-g)installations: "test": "mocha server-test"ou"test": "mocha server-test/**/*.js"pour les sous-documentsprojectinstallations: "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
.onlyet.skipgé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.