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

Mousquet
la source

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.

ncuillery
la source
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 [email protected]). 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
Nicholas Carey
la source
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.

cabaji99
la source
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.

AeroHil
la source
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",
    ...
  },

}
Andreas Heissenberger
la source
11

Vous pouvez utiliser le nom de fichier avec npm test --:

npm test -- fileName.jsx 
Hilal Aissani
la source
1
ça devrait être la réponse!
Allan Stepps
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

bmaggi
la source
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
TmTron
la source
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.

deko
la source
1

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

URL87
la source
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.
Hay OUE
la source
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)

Mohamed Allal
la source
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
Photonique
la source