Comment tester un seul fichier à l'aide de Jest?


361

Je peux tester plusieurs fichiers à l'aide de Jest, mais je n'arrive pas à comprendre comment tester un seul fichier.

J'ai:

  • Courir npm install jest-cli --save-dev
  • Mise à jour package.json: `{..." scripts ": {" test ":" jest "} ...}
  • A écrit un certain nombre de tests.

L'exécution npm testfonctionne comme prévu (actuellement, elle exécute 14 tests).

Comment puis-je tester un seul fichier, par exemple tester app/foo/__tests__/bar.spec.js?

J'ai essayé de courir npm test app/foo/__tests__/bar.spec.js(à partir de la racine du projet), mais j'obtiens l'erreur suivante:

npm ERR! Error: ENOENT, open '<path to project>/node_modules/app/foo/__tests__/bar.spec.js/package.json'

Merci

Réponses:


298

Pour exécuter un test spécifique, vous devrez utiliser la jestcommande. npm testne fonctionnera pas. Pour accéder jestdirectement sur la ligne de commande, installez-le via npm i -g jest-cliou yarn global add jest-cli.

Ensuite, exécutez simplement votre test spécifique avec jest bar.spec.js.

Remarque : vous n'avez pas à saisir le chemin d'accès complet à votre fichier de test. L'argument est interprété comme une expression rationnelle. Toute partie du chemin d'accès complet qui identifie de manière unique un fichier suffit.


5
Malheureusement, cela ne fonctionne pas pour moi. Courir jest bar.spec.jsdonne jest: command not found. J'ai confirmé que Jest est installé ( npm list -g jestmontre jest@0.1.37). FWIW, lorsque je cours en utilisant npm testil utilise jest-cli.
Mousquet du

4
Oui, jest-clic'est le bon module, installez-le globalement npm install -g jest-cli. jestdans npm est ... autre chose
ncuillery

56
C'est faux. Le fonctionnement du test npm ne signifie pas que jest est installé globalement. Cela signifie simplement que jest est installé dans votre projet.
Chiedo

20
Comme l'a dit @ChiedoJohn. Pour l'exécuter sans installer globalement, vous pouvez l'exécuter à partir de la racine de votre application:node_modules/.bin/jest args
Eddie Monge Jr

3
Si vous utilisez la configuration par défaut du jasmin, vous pouvez concentrer un seul test en utilisant fitau lieu de it.
eremzeit

381

Tout ce que vous avez à faire est de chanter l'incantation magique:

npm test -- SomeTestFileToRun

L'autonome --est * nix magic pour marquer la fin des options, ce qui signifie (pour NPM) que tout ce qui suit est passé à la commande en cours d'exécution, dans ce cas jest. En passant, vous pouvez afficher les notes d'utilisation plaisanterie en disant

npm test -- --help

Quoi qu'il en soit, chanter

npm test -- Foo

exécute les tests dans le fichier nommé ( FooBar.js). Vous devez cependant noter que:

  • Jest traite le nom comme sensible à la casse, donc si vous utilisez un système de fichiers insensible à la casse mais respectant la casse (comme Windows NTFS), vous pourriez rencontrer ce qui semble être une bizarrerie.

  • Jest semble traiter la spécification comme un préfixe.

Donc l'incantation ci-dessus

  • Courez FooBar.js, Foo.jsetFooZilla.js
  • Mais PAS courir foo.js

Merci, malheureusement, j'obtiens la même erreur lors de l'exécution de ceci:npm ERR! Error: ENOENT, open '<path to project>/node_modules/<name of file>/package.json'
Musket

1
existe-t-il une méthode alternative pour exécuter des tests de plaisanterie en dehors de la ligne de commande ?? , comme si je fais une demande de publication à mon api de projet existant, cela me posera un problème de jeton CSRF. Comme comment vais-je configurer les tests de plaisanterie sur mon projet existant ?? afin qu'il commence à servir la demande en utilisant '/ rest-api' au lieu de ' localhost: 8000 / rest-api '
Suyog Sawant

@SuyogSawant: ce n'est pas un commentaire. c'est une question en soi. Vous devriez le demander ici sur StackOverflow.
Nicholas Carey

1
dans mon cas, cela a npm test ToDoForm.test.jsfonctionné tout simplement jest ToDoForm.test.jspas
Tomasz Mularczyk

votre deuxième point sur la sensibilité à la casse ne correspond pas à l'incantation que vous fournissez ci-dessus.
NSjonas

38

Pour exécuter un test individuel:

npm test -t ValidationUtil # `ValidationUtil` its my module `ValidationUtil.spec.js`

-t- après avoir mis une expression régulière contenant le nom du test.


1
Impressionnant! Fonctionne très bien!
Flavio

21

L'utilisation npm testne signifie pas que Jest est installé à l'échelle mondiale. Cela signifie simplement que "test" est mappé à l'aide de jest dans votre package.json

Voici ce qui a fonctionné pour moi, au niveau racine du projet:

node_modules/.bin/jest [args]

args peut être le fichier de test que vous souhaitez exécuter ou le répertoire contenant plusieurs fichiers.


A travaillé pour moi;)
Wogsland

1
Merci! cela m'a été très utile!
Isaac

5
un raccourci pour exécuter les binaires node_modules/.binconsiste à utiliser la npxcommande. Par exemplenpx jest [args]
Sergio Mazzoleni

16

si vous utilisez, yarnvous pouvez ajouter le fichier .spec.jsou .test.jsdirectement après:

yarn test src/lib/myfile.test.js

C'est la partie de mon package.jsoninstallation avec jest en tant que package local (suppression des parties pertinentes):

{
...
  "scripts": {
    "test": "jest",
    "testw": "jest --watch",
    "testc": "jest --coverage",
...
  },
  "devDependencies": {
    "jest": "^18.1.0",
    ...
  },

}


6

Si vous exécutez npm >= 5.2.0et que vous avez installé jest localement en tant que devDependenciesavec, npm i -d jestvous pouvez exécuter jest sur un fichier particulier en faisantnpx jest /path/to/your/spec.js


5

Nous utilisons nrwl-nx avec angulaire . Dans ce cas, nous pouvons utiliser cette commande:

npm test <ng-project> -- --testFile "file-name-part"

Remarques:

  • npm testexécutera le script de test spécifié dans package.json: "test:client": "ng test client"
  • ainsi le reste du cmd sera passé au test ng
    • <ng-project> est le nom d'un projet angular.json
      • lorsque vous omettez ce paramètre, le "defaultProject"(spécifié dans angular.json) sera utilisé (vous devez donc le spécifier, lorsque le test n'est pas dans votre projet par défaut)
    • nous devons ensuite vérifier quel générateur est utilisé:
      • dans angular.jsonnaviguer vers "project"- "<ng-project>"- "architect"-"test"
      • et vérifiez le "builder", qui dans notre cas est:"@nrwl/jest:jest"
    • maintenant que nous connaissons le constructeur, nous devons trouver les paramètres de ligne de commande disponibles
      • sur la ligne de commande, exécutez npm test server -- --helppour voir toutes les options disponibles
      • ou consultez les documents en ligne
    • l'une des options est celle --testFilequi est utilisée ici

C'est celui qui l'a fait pour moi parce que nous utilisons nx. Je vous remercie.
user906573

4

C'est ainsi que j'exécute dynamiquement des tests sur un fichier spécifique sans redémarrer le test. Mon projet React a été créé étaitcreate-react-app

il surveille donc le test des modifications, exécutant automatiquement le test lorsque j'apporte des modifications.

Voilà donc ce que je vois à la fin des résultats des tests sur le terminal.

Test Suites: 16 passed, 16 total
Tests:       98 passed, 98 total
Snapshots:   0 total
Time:        5.048s
Ran all test suites.

Watch Usage: Press w to show more.

Appuyez sur W

Watch Usage
  Press f to run only failed tests.
  Press o to only run tests related to changed files.
  Press q to quit watch mode.
  Press p to filter by a filename regex pattern.
  Press t to filter by a test name regex pattern.
  Press Enter to trigger a test run.

puis appuyez sur P

Pattern Mode Usage
  Press Esc to exit pattern mode.
  Press Enter to filter by a filenames regex pattern.

 pattern 

 Start typing to filter by a filename regex pattern.

c'est après que j'ai voulu exécuter le fichier 'index.es6.js' dans le dossier 'Login'

Pattern Mode Usage
  Press Esc to exit pattern mode.
  Press Enter to filter by a filenames regex pattern.

 pattern  login/index

 Pattern matches 1 file
  src/containers/Login/index.es6.test.js

Voilà comment j'exécute des tests sur un fichier spécifique.



1

Je viens d'installer Jest comme globalement, puis j'ai couru jest myFileToTest.spec.jset cela a fonctionné


1

Vous avez deux options:

  • Option 1: ligne de commande. Vous pouvez exécuter la commande suivante
node '/Users/complete-path-to-you-project/your-project/node_modules/.bin/jest' '/Users/complete-path-to-you-project/your-project/path-to-your-file-within-the-project/your-file.spec.ts'

Cela vous évite d'installer Jest à l'échelle mondiale. Vous utilisez la plaisanterie utilisée par votre projet.

  • Option 2: Si vous utilisez VS Code, vous disposez d'un excellent plugin pour cela: Jest Runner . Il vous permet non seulement d'exécuter des tests fichier par fichier, mais même des suites et des spécifications spécifiques simplement par un clic droit sur les tests que vous souhaitez exécuter.

0

Jest utilisera ce que vous passez comme motif d'expression régulière . Cela correspondra pour.

Si vous souhaitez exécuter un fichier de test spécifique. Ensuite, la meilleure façon de le faire est de préciser le chemin d'accès complet. (Vous pouvez trop précis un certain chemin relatif comme (src / XFolder / index.spec.ts)).

Le moyen le plus simple de fournir le chemin complet dans le répertoire et sous Linux est:

jest $PWD/index.spec.ts

Notez l'utilisation de la variable $ PWD .

entrez la description de l'image ici

Pour les fenêtres ! (à mettre à jour)


0

Avec Angular et Jest, vous pouvez l'ajouter à package.json sous "scripts"

"test:debug": "node --inspect-brk ./node_modules/jest/bin/jest.js --runInBand"

Ensuite, pour exécuter le test unitaire pour un fichier spécifique, vous pouvez écrire cette commande dans votre terminal

npm run test:debug modules/myModule/someTest.spec.ts

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.