J'utilise Mocha pour tester mes trucs 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?
J'utilise Mocha pour tester mes trucs 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?
Réponses:
Essayez d'utiliser l' --grep
option de mocha :
-g, --grep <pattern> only run tests matching <pattern>
Vous pouvez utiliser toute 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 grince à travers les noms de tous describe(name, fn)
et les it(name, fn)
invocations.
Envisagez d'utiliser des describe()
appels imbriqués pour l'espace de noms afin de faciliter la localisation et la sélection d'ensembles particuliers.
mocha some/test.js
) ne fonctionnait pas du tout. Merci!
logs a bcd
qui contient la logs a
sous-chaîne? Regexp ^$
ne fonctionne pas sur 0.10.2.
En fonction de votre modèle d'utilisation, vous pouvez simplement utiliser uniquement . Nous utilisons le style TDD; cela ressemble à ceci:
test.only('Date part of valid Partition Key', function (done) {
//...
}
Seul ce test s'exécutera à partir de tous les fichiers / suites.
it.only
.
it.only
ne fonctionne pas avec given
de mocha-testdata . Et il est facile d'oublier de le retirer plus tard.
eslint-plugin-mocha
a une règle no-exclusive-tests
qui vous rattrapera si vous oubliez de supprimer .only
.
Si vous utilisez npm test
(à l'aide de scripts package.json), utilisez un--
pour passer 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 utiliser --bail
ce qui semble moins difficile
npm test -- --bail
--grep
peut être un peu difficile - essayez de le mettre juste après mocha dans l'entrée de script npm. Sinon, npm test -- --bail
c'est utile pour écoper après le premier test qui a échoué
--grep
sauver ma journée! Merci beaucoup. PS. Je suis sous Windows, en cours d'exécutionnpm test -- --grep @tag
En fait, on peut également exécuter 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 vos mocha.opts, créez respectivement une copie, sans:
node_modules/.bin/mocha --opts test/mocha.single.opts test/self-test.spec.js
Voici mon mocha.single.opts (c'est seulement différent en manquant la ligne glob susmentionnée)
--require ./test/common.js
--compilers js:babel-core/register
--reporter list
--recursive
Contexte: Bien que vous puissiez remplacer les divers commutateurs du fichier opts (en commençant par --
), vous ne pouvez pas remplacer le glob . Ce lien contient également quelques explications.
Astuce: si node_modules/.bin/mocha
vous êtes confus, utilisez le paquet local mocha. Vous pouvez également écrire simplement mocha
, si vous l'avez installé à l'échelle mondiale.
Et si vous voulez le confort de package.json
: Toujours: retirez le **/*
glob -ish de votre mocha.opts
, insérez-les ici, pour tous les tests, laissez-les de côté pour le seul test:
"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
(attention --
!)
Warning: Could not find any test files matching pattern: $1
Les solutions ci-dessus ne fonctionnaient pas pour moi. L'autre façon d'exécuter un seul test est
mocha test/cartcheckout/checkout.js -g 'Test Name Goes here'
Cela permet d'exécuter un scénario de test à partir d'un seul fichier et avec un nom spécifique.
-g
et vous n'aurez pas besoin de spécifier un nom de fichier. Si vous ne pouvez pas écrire une expression suffisamment sélective, cela signifie que vous ne nommez pas correctement vos tests.
npm test <filepath>
par exemple :
npm test test/api/controllers/test.js
ici 'test / api / controllers / test.js' est chemin de fichier.
Vous pouvez essayer "it.only"
it.only('Test one ', () => {
expect(x).to.equal(y);
});
it('Test two ', () => {
expect(x).to.equal(y);
});
en cela, le premier seulement exécutera
--forbid-only
sur le serveur CI / build. .only
a tendance à se faufiler dans la branche principale et à rendre les autres tests muets car ils ne s'exécuteront plus. J'en suis venu à penser au workflow de changer le code pour exécuter différents tests et une anti-fonctionnalité. Le lanceur de test doit déterminer quels tests doivent être exécutés (alias tests balisés) et non le développeur.
it.only
le repo
En regardant dans https://mochajs.org/#usage, nous voyons que simplement utiliser
test de moka / monfichier
marchera. Vous pouvez omettre le «.js» à la fin.
--grep
seulement filtré des@
balises.