web-dev-qa-db-fra.com

Comment mocha peut-il rechercher récursivement dans mon dossier `src` un modèle de nom de fichier spécifique?

Dans mon package npm, je voudrais émuler le modèle Meteor suivant: un fichier source (nommé client.js) possède un fichier de test (nommé client.tests.js) vivent dans un src/ dossier. Les tests s'exécutent avec le npm test commande.

Je suis les documents d'utilisation au "t". Je ne veux pas utiliser un find dans ma commande de test de package.

  1. Je comprends que mocha peut exécuter récursivement des tests:

    moka - récursif

  2. Je comprends que mocha peut exécuter des tests dans un sous-dossier spécifique en utilisant le --recursive drapeau:

    mocha src - récursif

  3. Je comprends également que je peux spécifier un glob pour filtrer les fichiers en passant *.tests.js:

    mocha * .tests.js

Mais, je veux les trois. Je veux que mocha teste uniquement les fichiers se terminant par tests.js dans le dossier src, en vérifiant récursivement les sous-répertoires.

mocha --recursive *.tests.js

// See the files?
$ > ll ./src/app/
total 168
-rw-r--r--  ... client.js
-rw-r--r--  ... client.tests.js

// Option A
$ > mocha --recursive *.tests.js
Warning: Could not find any test files matching pattern: *.tests.js
No test files found

// Option B
$ > mocha *.tests.js --recursive
Warning: Could not find any test files matching pattern: *.tests.js
No test files found.

// Option C
$ > mocha --recursive src/app/*.tests.js
3 passing (130ms)
3 failing

Donc...

  1. Pourquoi le moka ne capte-t-il pas le *.tests.js fichiers dans les sous-dossiers?
  2. Pourquoi cela fonctionne-t-il si je spécifie le chemin d'accès complet au fichier?
  3. Comment puis-je le faire fonctionner comme souhaité?
20
azatar

Le --recursive flag est destiné à fonctionner sur les répertoires. Si vous deviez passer un glob qui correspond aux répertoires, alors ces répertoires seraient examinés récursivement mais si vous passez un glob qui correspond aux fichiers, comme vous le faites, alors --recursive est inefficace. Je suggérerais de ne pas utiliser --recursive avec un glob car les globs ont déjà la capacité de regarder récursivement dans les sous-répertoires. Vous pourriez faire:

mocha 'src/app/**/*.tests.js'

Cela correspondrait à tous les fichiers qui correspondent à *.tests.js récursivement dans src/app. Notez comment j'utilise des guillemets simples autour du motif. Il s'agit de citer le modèle afin qu'il soit transmis tel quel au code de globbing de Mocha. Sinon, votre Shell pourrait l'interpréter. Certains shells, selon les options, traduiront ** en * et vous n'obtiendrez pas les résultats souhaités.

53
Louis