Exécuter UN SEUL test avec Jest

95

Très simple, je souhaite lancer un seul test avec Jest.

Je mets it.onlyou describe.onlymais il exécute encore beaucoup de tests. Je pense qu'il exécute tous les tests depuis mon dernier commit, mais il ne devrait pas avoir ce comportement avec l' onlyindicateur explicitement défini, non?

Qu'est-ce qui cause ce comportement et comment exécuter un seul test?

jpenna
la source
1
Double possible de Comment exécuter un seul test avec Jest?
YPCrumble
Si j'accepte le "drapeau en double", cela "marquera votre question comme un double, ce qui dirigera les futurs lecteurs vers la question d'origine et empêchera que d'autres réponses soient publiées ici." Je ne pense pas qu'ils soient exactement les mêmes, car chaque question et chaque réponse prennent des approches différentes.
jpenna
@jpenna: il suffit de regarder la question d'origine. Les mêmes réponses ont été données.
Dan Dascalescu

Réponses:

122

Jest met en parallèle les exécutions de tests et il ne sait pas à l'avance quels tests il doit exécuter et lesquels il ne doit pas exécuter. Cela signifie que lorsque vous utilisez «fit», il n'exécutera qu'un seul test dans ce fichier mais exécutera toujours tous les autres fichiers de test de votre projet .

fit, fdescribeet it.only, describe.onlyont le même objectif, sautez d'autres tests, exécutez uniquement moi.

Source: https://github.com/facebook/jest/issues/698#issuecomment-177673281


Utilisez un jestmécanisme de filtrage, lorsque vous exécutez vos tests comme

jest --config=jest.config.json --watch

Vous pouvez filtrer les tests par un testnameou filename, suivez simplement les instructions du terminal

entrez la description de l'image ici

Appuyez sur p, puis saisissez un nom de fichier

entrez la description de l'image ici

Ensuite, vous pouvez utiliser describe.onlyet it.onlyqui sautera tous les autres tests du fichier filtré et testé.

Dawid Karabin
la source
1
Je fais ce filtre par fichier, mais c'est bizarre ... Donc le .onlyseul fonctionne pour les tests du même fichier?
jpenna
2
J'aime encore plus cette chose .only, car j'avais l'habitude d'oublier d'annuler .only dans le code source et de le valider.
Dziamid
3
Même si les tests sont ignorés, il semble toujours évaluer le code testé dans chaque exemple. N'y a-t-il vraiment pas un moyen de n'exécuter qu'un seul test en 2019?
adaam
@adaam Je ne suis pas sûr d'avoir bien compris votre question, alors corrigez-moi si je me trompe. Si les tests sont dans des fichiers séparés, seul le code d'un fichier spécifique est exécuté lorsque vous utilisez pattern pour exécuter des tests explicitement. Lorsque le code d'un fichier spécifique est exécuté, tout le code de ce fichier est analysé. Ainsi, même si vous utilisez it.onlyou it.skippour un seul test contenant une erreur de syntaxe, tous les tests échoueront. Bien sûr, le code des fichiers exclus par motif ne sera pas exécuté. imgur.com/z9FlQEZ
Dawid Karabin
@hinok Collez un console.log dans votre composant Carousel et relancez votre testeur. Pour moi, même si je l'utilise if.onlyconsole.logs du composant Carousel autant de fois qu'il y a des tests ignorés / non ignorés pour ce composant dans vos modèles de surveillance.
adaam
29

it.onlyet describe.onlyne fonctionnent que pour le module dans jest -t name-of-speclequel ils se trouvent. Si vous rencontrez des problèmes pour filtrer les tests dans plusieurs fichiers, vous pouvez utiliser des tests de filtrage qui correspondent au nom de la spécification (correspondance avec le nom dans describe ou test).
Source: https://facebook.github.io/jest/docs/en/cli.html

Par exemple, je concentre le test que j'écris actuellement comme ceci (avec le script de test dans le package.json):
npm test -- -t "test foo"

rodgobbi
la source
4
Cela exécute toujours tous les tests dans mon cas et je n'ai aucune idée pourquoi
Kenny
La seule explication à laquelle je peux penser est que vous passez un argument de chaîne qui existe dans chaque nom de test (ou describebloc de test ). Si c'est le cas, vous devez vous limiter au nom exact du test sur lequel vous souhaitez vous concentrer.
rodgobbi
Cette réponse semble beaucoup plus appropriée pour une autre question: stackoverflow.com/questions/42827054/…
千 木 郷
8

C'est comme ça:

jest sometest.test.js -t "some expression to match a describe or a test"

il testera tous les fichiers avec le nom sometest.test.jset la correspondance basés sur l'option -t, si vous ne voulez tester qu'un fichier spécifique, vous pouvez le faire:

jest src/user/.../sometest.test.js
Hossein Alipour
la source
Pour ceux qui cherchent à implémenter cette option dans un launch.jsonfichier de configuration VSCode qui déclenchera les tests à un cas de test spécifique: medium.com/better-programming
Gus
8

Pour moi, cela fonctionne si j'utilise 2 paramètres comme celui-ci:

yarn test --watch -f "src/...fullpath.../reducer.spec.js" -t "Name of the test"

Drapeaux:

--watch: is optional

-f: will do filtering of your files, so if you have a lot of tests with the same name, specify the full path to the exact file

-t: works with 'describe' name or 'it' name of your test
tonco
la source