546 votes

Comment exécuter un seul test en utilisant Jest ?

J'ai un test "works with nested children" dans le fichier fix-order-test.js.

L'exécution de la commande ci-dessous exécute tous les tests du fichier.

jest fix-order-test

Comment faire pour n'exécuter qu'un seul test ? Le test ci-dessous ne fonctionne pas car il recherche un fichier de l'expression rationnelle spécifiée.

jest 'works with nested children'

1 votes

0 votes

Puisque vous utilisez jest en ligne de commande, probablement par le biais de npm, il suffit d'ajouter l'option --testNamePattern 'works with nested children' Options Jest CLI #testNamePattern

0 votes

@BioGenX : le lien est maintenant rompu

671voto

Andreas Köberle Points 16453

À partir de la ligne de commande, utilisez la commande --testNamePattern o -t drapeau :

jest -t 'fix-order-test'

Cela n'exécutera que les tests qui correspondent au modèle de nom de test que vous fournissez. C'est dans le Documentation sur Jest .

Une autre méthode consiste à exécuter les tests en mode veille, jest --watch puis appuyez sur P pour filtrer les tests en tapant le nom du fichier de test ou T pour exécuter un seul nom de test.


Si vous avez un it à l'intérieur d'un describe vous devez exécuter

jest -t '<describeString> <itString>'

0 votes

Je reçois des options non reconnues pour -t. Oui, la documentation le mentionne. L'option a été ajoutée dans la version 16.0. Je suis sur la dernière version. jest -help ne semble pas mentionner l'indicateur. Merci.

24 votes

Notez que c'est le modèle de test pour le nom de test spécifique à l'intérieur. it() et non le nom du fichier. C'est ce que je pensais.

130 votes

Si vous utilisez npm test, vous devez faire npm test -- -t "fix order test"

205voto

flaky Points 306

Documentation sur Jest recommande ce qui suit :

Si un test échoue, l'une des premières choses à vérifier doit être si le test échoue alors que c'est le seul test qui s'exécute. Dans Jest il est simple de n'exécuter qu'un seul test - il suffit de modifier temporairement le paramètre test à un test.only

test.only('this will be the only test that runs', () => {
   expect(true).toBe(false);
});

ou

it.only('this will be the only test that runs', () => {
   expect(true).toBe(false);
});

14 votes

Cela fonctionne pour moi avec jest 20.0.4. Bien qu'il ne saute que le reste des tests dans ce fichier. Les tests des autres fichiers continuent à être exécutés, à moins que vous n'ayez déjà limité l'exécution à ce seul fichier.

10 votes

C'est une plaisanterie cependant - parce qu'il exécute les tests de manière asynchrone, il ne peut probablement pas déterminer quel test exécuter dans quel fichier dès le début. Ainsi, il exécutera tous les fichiers par défaut et DANS les fichiers, il vérifiera les éléments suivants test.only . Ainsi, si vous ne souhaitez exécuter qu'un seul test dans un fichier contenant plusieurs scénarios de test dans une suite de scénarios de test composée de plusieurs fichiers, vous devez malheureusement exécuter ce seul fichier. jest myTestFile.test.js

0 votes

@johnslay : C'est le cas, je viens de le tester

60voto

Cory House Points 5014

Comme mentionné dans d'autres réponses, test.only ne fait que filtrer les autres tests dans le même fichier . Ainsi, les tests dans d'autres fichiers seraient toujours exécutés.

Pour exécuter un seul test, il y a donc deux approches :

  • Option 1 : Si le nom de votre test est unique, vous pouvez entrer t en mode veille et saisissez le nom du test que vous souhaitez exécuter.

  • Option 2 :

    1. Hit p en mode veille pour entrer une expression rationnelle pour le nom de fichier que vous souhaitez exécuter. (Les commandes pertinentes comme celle-ci sont affichées lorsque vous exécutez Jest en mode veille).
    2. Changement it a it.only sur le test que vous souhaitez exécuter.

Avec l'une ou l'autre des approches ci-dessus, Jest n'exécutera que le seul test dans le fichier que vous avez spécifié.

23voto

Niima Points 11

Vous pouvez également utiliser f o x pour concentrer ou exclure un test. Par exemple

fit('only this test will run', () => {
   expect(true).toBe(false);
});

it('this test will not run', () => {
   expect(true).toBe(false);
});

xit('this test will be ignored', () => {
   expect(true).toBe(false);
});

2 votes

xit a fonctionné pour moi, mais fit Je suis en train d'utiliser jest@22.4.4.

1 votes

Je pense que le principal inconvénient de cette approche est que - si vous essayez simplement d'approfondir un test pour corriger un bogue - elle entraîne des modifications inutiles des fichiers de test sous-jacents. Si, pour une raison quelconque, vous voulez maintenir le code de test (à travers les commits, par exemple), alors cela peut avoir du sens.

0 votes

Aussi fit ne fonctionne pas pour la même raison que it.only ne fonctionne pas. Il empêche seulement d'autres tests dans le même fichier de courir. Les autres fichiers continuent de s'exécuter.

15voto

Wladimir Gramacho Points 103

Comme indiqué dans une réponse précédente, vous pouvez exécuter la commande

jest -t 'fix-order-test'

Si vous avez un it à l'intérieur d'un describe vous devez exécuter

jest -t '<describeString> <itString>'

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X