web-dev-qa-db-fra.com

Exécuter le moka sans les chemins

J'ai ceci (dans gulpfile.js):

var gulp = require("gulp");
var mocha = require("gulp-mocha");
gulp.task("test", function() {
    gulp
        .src(["./**/*_test.js", "!./node_modules/**/*.js"]);
});

et il fonctionne.

Je veux reproduire le même comportement, à l'exclusion du dossier "node_modules" , de la commande mocha, en cours d'exécution npm test (dans package.json):

"scripts": {
    "test": "mocha **\\*_test.js !./node_modules/**/*.js*",
}

et ça ne marche pas.

J'utilise Windows.

Toute suggestion?

9
Alex 75

Comme suggéré dans un commentaire de @thebearingedge, à la fin je mets TOUS les fichiers source (avec les fichiers de test relatifs) dans un nouveau répertoire "src" .
De cette manière, je peux définir la racine des tests avec un chemin excluant par défaut le dossier "node_modules". 

.
├── src  
    ├── fileA.js  
    ├── fileA_test.js  
    ├── fileB.js  
    ├── fileB_test.js  
├── node_modules
    ├── ...

J'ai dû mettre à jour le chemin dans le package.json, gulpfile.js et dans certains fichiers de commandes que j'utilise comme utilitaires.

Changements dans gulpfile.js :

.src(["./src/**/*_test.js"]);

et dans package.json :

"test": "mocha src\\**\\*_test.js",

Simple changement et ça marche.

  • Je suis libre de choisir les conventions de nommage que je préfère.
  • Chaque fichier de test reste proche du fichier JS relatif.
1
Alex 75

J'ai été capable de résoudre ce problème en utilisant des modèles globbing dans l'argument de mocha. Comme vous, je ne voulais pas placer tous mes tests dans un seul dossier tests. Je les voulais dans le même répertoire que la classe qu'ils testaient. Ma structure de fichier ressemblait à ceci:

project
|- lib
   |- class1.js
   |- class1.test.js
|- node_modules
   |- lots of stuff...

Exécuter ceci à partir du dossier project a fonctionné pour moi:

mocha './{,!(node_modules)/**}/*.test.js'

Ce qui correspond à n’importe quel fichier *.test.js de l’arborescence, tant son chemin n’est pas root à ./node_modules/.

C'est un outil en ligne pour tester des motifs globaux que j'ai trouvés utiles.

12
d512

Je ne suis pas un gourou des modèles moka ou style fourmis, mais il n'est peut-être pas possible d'esquiver un chemin spécifique dans la ligne de commande mocha.

Vous pouvez placer tous vos fichiers de test dans un dossier de test et définir votre package.json comme suit:

"scripts": {
    "test": "mocha ./test/**/*_test.js"
}

Vous pouvez également fournir plusieurs dossiers de départ:

"scripts": {
    "test": "mocha ./test/**/*_test.js ./another_test_folder/**/*_test.js"
}
5
baudo2048

Pour les utilisateurs de Windows Ce script fonctionnera parfaitement 

 "test": "mocha \"./{,!(node_modules)/**/}*.test.js\"",

J'espère que cela aidera.

à votre santé!

J'avais un répertoire spec contenant toutes mes spécifications. Dans ce répertoire, j'avais plusieurs sous-répertoires, dont le répertoire e2e specs. Dans ce scénario, j'ai utilisé la commande mocha specs $(find specs -name '*.js' -not -path "specs/e2e/*") pour exécuter tous mes tests en ignorant ceux du répertoire e2e.

1
Tomas Romero

Vous pouvez exclure des fichiers de moka en passant des opts

mocha -h|grep -i exclude
    --exclude <file>                        a file or glob pattern to ignore (default: )

mocha --exclude **/*-.jest.js

De plus, vous pouvez également créer un fichier test/mocha.opts et l'ajouter à cet emplacement.

# test/mocha.opts
--exclude **/*-test.jest.js
--require ./test/setup.js

Si vous voulez exclure un type de fichier particulier, vous pouvez faire quelque chose comme ceci:

// test/setup.js
require.extensions['.graphql'] = function() {
  return null
}

Ceci est utile lors du traitement d'extensions avec un chargeur de module tel que webpack que mocha ne comprend pas. 

0
lfender6445