web-dev-qa-db-fra.com

Comment exécuter un seul test avec Mocha?

J'utilise Mocha pour tester mon contenu JavaScript. Mon fichier de test contient 5 tests. Est-il possible d'exécuter un test spécifique (ou un ensemble de tests) plutôt que tous les tests du fichier?

225
Misha Moroshko

Essayez d’utiliser l’option --grep de mocha :

    -g, --grep <pattern>            only run tests matching <pattern>

Vous pouvez utiliser n'importe quelle expression rationnelle JavaScript valide en tant que <pattern>. Par exemple, si nous avons test/mytest.js:

it('logs a', function(done) {
  console.log('a');
  done();
});

it('logs b', function(done) {
  console.log('b');
  done();
});

Ensuite:

$ mocha -g 'logs a'

Pour exécuter un seul test. Notez que cela concerne les noms de tous les invocations describe(name, fn) et it(name, fn).

Envisagez d'utiliser des appels imbriqués describe() pour l'espacement de noms afin de faciliter la localisation et la sélection d'ensembles particuliers.

287
Ashe

En fonction de votre modèle d'utilisation, vous voudrez peut-être simplement utiliser seulement . Nous utilisons le style TDD; ça ressemble à ça:

test.only('Date part of valid Partition Key', function (done) {
    //...
}

Seul ce test sera exécuté à partir de tous les fichiers/suites.

139
J Burnett

Si vous utilisez npm test (en utilisant des scripts package.json), utilisez un -- supplémentaire pour transmettre le paramètre à mocha.

par exemple. npm test -- --grep "my second test"

EDIT: On dirait que --grep peut être un peu difficile (probablement en fonction des autres arguments). Vous pouvez:

Modifiez le package.json:

"test:mocha": "mocha --grep \"<DealsList />\" .",

Ou bien utilisez --bail qui semble être moins difficile

npm test -- --bail
58
Ashley Coolman

Bonjour, les solutions ci-dessus n'ont pas fonctionné pour moi. L’autre façon de faire un seul test est de

mocha test/cartcheckout/checkout.js -g 'Test Name Goes here'

Cela aide à exécuter un scénario de test à partir d'un seul fichier et avec un nom spécifique.

7
Ruthreshwar
npm test <filepath>

par exemple : 

npm test test/api/controllers/test.js

ici 'test/api/controllers/test.js' est chemin de fichier.

6
Jitendra Pawar

lancer un seul test - par nom de fichier -

En fait, on peut aussi lancer un seul test mocha par nom de fichier (pas seulement par "it () - string-grepping") si vous supprimez le motif glob (par exemple ./test/**/*.spec.js) de votre fichier mocha.opts, puis créez , sans pour autant:

node_modules/.bin/mocha --opts test/mocha.single.opts test/self-test.spec.js

Voici mon mocha.single.opts (c'est différent de rater la ligne glob susmentionnée)

--require ./test/common.js
--compilers js:babel-core/register
--reporter list
--recursive

Background: Bien que vous puissiez remplacer les différents commutateurs du fichier opts-File (commençant par --), vous ne pouvez pas remplacer le glob . Ce lien contient également quelques explications.

Astuce: si node_modules/.bin/mocha vous déroute, utilisez le paquet local mocha. Vous pouvez également écrire juste mocha, si vous l'avez installé globalement.


Et si vous voulez le confort de package.json: Still: supprimez le **/*- ish glob de votre mocha.opts, insérez-les ici, pour les tests complets, laissez-les de côté pour le test unique:

"test": "mocha ./test/**/*.spec.js",
"test-watch": "mocha -R list -w ./test/**/*.spec.js",
"test-single": "mocha $1",
"test-single-watch": "mocha -R list -w $1",

usage:

> npm run test

respectivement

> npm run test-single -- test/ES6.self-test.spec.js 

(Remarquez le --!)

6
Frank Nocke

Il suffit d'utiliser .only avant 'décrire', 'il' ou 'le contexte'. Je cours avec "$ npm run test: unit", et il n’exécute que les unités avec .only.

describe.only('get success', function() {
 // ...
});

it.only('should return 1', function() {
  // ...
});
1
QauseenMZ

Vous pouvez essayer "seulement"

 it.only('Test one ', () => {

            expect(x).to.equal(y);
        });
it('Test two ', () => {

            expect(x).to.equal(y);
        });

dans ce premier le seul sera exécuté 

0
Bikesh M Annur

Vous ne savez pas pourquoi la méthode grep ne fonctionne pas pour moi lorsque j'utilise npm test. Cela fonctionne bien. Je dois également spécifier le dossier de test également pour une raison quelconque.

npm test - test/sometest.js

0
Andy

En regardant dans https://mochajs.org/#usage Nous voyons que simplement utiliser 

test moka/mon fichier

marchera. Vous pouvez omettre le ".js" à la fin.

0
Dave

Consolidez tous vos tests dans un fichier test.js et votre paquet json ajoute des scripts en tant que:

  "scripts": {
  "api:test": "node_modules/.bin/mocha --timeout 10000 --recursive api_test/"
},

Tapez la commande sur votre répertoire de test: 

npm run api:test
0
Shahin