web-dev-qa-db-fra.com

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

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?

199
Freewind

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/.

130
Jeff Dickey

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.

262
Behrang

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')
79
250R

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
28
gregtczap

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 .

23
Michael Bushe

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/
20
Anthony Awuley

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/

10
jfunk

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 .

9
themefield

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

  1. Pour les installations global (-g): "test": "mocha server-test" ou "test": "mocha server-test/**/*.js" pour les sous-documents
  2. Pour les installations 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 en tant que npm test

3
Cozzbie

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.

3
Robin Luiten

Comme mentionné par @superjos dans les commentaires, utilisez

mocha --recursive "some_dir"

3
avck

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

2
lwdthe1

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.

2
Pierre