Wie teste ich eine einzelne Datei mit Jest?

360

Ich kann mehrere Dateien mit Jest testen, aber ich kann nicht herausfinden, wie eine einzelne Datei getestet wird.

Ich habe:

  • Lauf npm install jest-cli --save-dev
  • Aktualisiert package.json: `{..." scripts ": {" test ":" jest "} ...}
  • Eine Reihe von Tests geschrieben.

Das Ausführen npm testfunktioniert wie erwartet (derzeit werden 14 Tests ausgeführt).

Wie teste ich eine einzelne Datei, zB testen app/foo/__tests__/bar.spec.js?

Ich habe versucht, npm test app/foo/__tests__/bar.spec.js(vom Projektstamm) auszuführen, erhalte jedoch die folgende Fehlermeldung:

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

Vielen Dank

Muskete
quelle

Antworten:

297

Um einen bestimmten Test auszuführen, müssen Sie den jestBefehl verwenden. npm testwird nicht funktionieren. Um jestdirekt über die Befehlszeile zuzugreifen , installieren Sie es über npm i -g jest-clioder yarn global add jest-cli.

Führen Sie dann einfach Ihren spezifischen Test mit aus jest bar.spec.js.

Hinweis : Sie müssen nicht den vollständigen Pfad zu Ihrer Testdatei eingeben. Das Argument wird als regulärer Ausdruck interpretiert. Jeder Teil des vollständigen Pfads, der eine Datei eindeutig identifiziert, reicht aus.

ncuillery
quelle
5
Leider funktioniert das bei mir nicht. Laufen jest bar.spec.jsgibt jest: command not found. Ich habe bestätigt, dass Jest installiert ist ( npm list -g jestShows [email protected]). FWIW, wenn ich npm testes verwende, verwendet jest-cli.
Muskete
4
Ja, jest-cliist das richtige Modul, installieren Sie es global npm install -g jest-cli. jestin npm ist ... etwas anderes
ncuillery
56
Das ist falsch Das Arbeiten mit npm-Tests bedeutet nicht, dass jest global installiert ist. Es bedeutet nur, dass jest in Ihrem Projekt installiert ist.
Chiedo
20
Wie @ChiedoJohn sagte. Um es auszuführen, ohne es global zu installieren, können Sie dies vom Stammverzeichnis Ihrer App aus ausführen:node_modules/.bin/jest args
Eddie Monge Jr
3
Wenn Sie das Standard-Jasmin-Setup verwenden, können Sie einen einzelnen Test mit fitanstelle von fokussieren it.
Eremzeit
380

Alles was Sie tun müssen, ist die magische Beschwörung zu singen:

npm test -- SomeTestFileToRun

Das Standalone --ist * nix magic zum Markieren des Endes von Optionen, was bedeutet (für NPM), dass in diesem Fall alles danach an den ausgeführten Befehl übergeben wird jest. Nebenbei können Sie Hinweise zur Verwendung von Scherzen anzeigen, indem Sie sagen

npm test -- --help

Jedenfalls singen

npm test -- Foo

führt die Tests in der benannten Datei ( FooBar.js) aus. Sie sollten jedoch beachten, dass:

  • Jest behandelt den Namen so, dass zwischen Groß- und Kleinschreibung unterschieden wird. Wenn Sie also ein Dateisystem verwenden, bei dem die Groß- und Kleinschreibung nicht berücksichtigt wird, bei dem jedoch die Groß- und Kleinschreibung beachtet wird (z. B. Windows NTFS), kann es vorkommen, dass eine seltsame Situation auftritt.

  • Jest scheint die Spezifikation als Präfix zu behandeln.

Also wird die obige Beschwörung

  • Laufen FooBar.js, Foo.jsundFooZilla.js
  • Aber NICHT rennen foo.js
Nicholas Carey
quelle
Danke, leider bekomme ich den gleichen Fehler beim Ausführen:npm ERR! Error: ENOENT, open '<path to project>/node_modules/<name of file>/package.json'
Musket
1
Gibt es eine alternative Methode zum Ausführen von Scherztests außer der Befehlszeile? , als ob ich eine Post-Anfrage an meine bestehende Projekt-Rest-API stelle, gibt es mir ein CSRF-Token-Problem. Wie werde ich Scherztests für mein bestehendes Projekt einrichten? damit die Anfrage mit '/ rest-api' anstelle von ' localhost: 8000 / rest-api ' bedient wird
Suyog Sawant
@SuyogSawant: Das ist kein Kommentar. Es ist eine Frage für sich. Sie sollten es hier auf StackOverflow fragen.
Nicholas Carey
1
in meinem Fall einfach npm test ToDoForm.test.jsfunktioniert, während jest ToDoForm.test.jsnicht
Tomasz Mularczyk
Ihr zweiter Punkt zur Groß- und Kleinschreibung stimmt nicht mit der oben angegebenen Beschwörung überein.
NSjonas
38

So führen Sie einen Einzeltest durch:

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

-t- nachdem es einen regulären Ausdruck mit dem Testnamen eingefügt hat .

cabaji99
quelle
1
Genial! Hat super funktioniert!
Flavio
21

Verwenden npm testbedeutet nicht, dass Jest global installiert wird. Es bedeutet nur, dass "test" der Verwendung von jest in Ihrer package.json zugeordnet ist

Folgendes hat für mich auf der Stammebene des Projekts funktioniert:

node_modules/.bin/jest [args]

args kann die Testdatei sein, die Sie ausführen möchten, oder das Verzeichnis, das mehrere Dateien enthält.

AeroHil
quelle
Arbeitete für mich;)
Wogsland
1
Vielen Dank! das war sehr nützlich für mich!
Isaac
5
Eine Verknüpfung zum Ausführen von Binärdateien node_modules/.binist die Verwendung des npxBefehls. Zum Beispielnpx jest [args]
Sergio Mazzoleni
16

Wenn Sie verwenden yarn, können Sie die Datei .spec.jsoder .test.jsdirekt nach:

yarn test src/lib/myfile.test.js

Dies ist der Teil von my package.jsonwith jest install als lokales Paket (entfernt die relevanten Teile):

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

}
Andreas Heissenberger
quelle
11

Sie können den Dateinamen verwenden mit npm test --:

npm test -- fileName.jsx 
Hilal Aissani
quelle
1
das sollte die Antwort sein!
Allan Stepps
6

Wenn Sie npm >= 5.2.0scherzen und Jest lokal als devDependenciesmit installiert haben npm i -d jest, können Sie Scherz auf eine bestimmte Datei ausführen, indem Sie dies tunnpx jest /path/to/your/spec.js

bmaggi
quelle
5

Wir verwenden nrwl-nx mit Winkel . In diesem Fall können wir diesen Befehl verwenden:

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

Anmerkungen:

  • npm testführt das in package.json: "test:client": "ng test client"
  • somit wird der Rest des cmd an ng test übergeben
    • <ng-project> ist der Name eines Projekts in angular.json
      • Wenn Sie diesen Parameter weglassen, wird der "defaultProject"(in angular.json) angegebene Parameter verwendet (Sie müssen ihn also angeben, wenn sich der Test nicht in Ihrem Standardprojekt befindet).
    • Als nächstes müssen wir überprüfen, welcher Builder verwendet wird:
      • in angular.jsonnavigieren zu "project"- "<ng-project>"- "architect"-"test"
      • und überprüfen Sie die "builder", die in unserem Fall ist:"@nrwl/jest:jest"
    • Nachdem wir den Builder kennen, müssen wir die verfügbaren cmd-Zeilenparameter finden
      • Führen Sie npm test server -- --helpin der Befehlszeile alle verfügbaren Optionen aus
      • oder überprüfen Sie die Online-Dokumente
    • Eine der Optionen ist --testFiledie, die hier verwendet wird
TmTron
quelle
Das ist derjenige, der es für mich getan hat, weil wir nx verwenden. Vielen Dank.
user906573
4

Auf diese Weise führe ich Tests für eine bestimmte Datei dynamisch aus, ohne den Test neu zu starten. Mein Reaktionsprojekt wurde erstelltcreate-react-app

Daher wird der Test auf Änderungen überwacht und der Test automatisch ausgeführt, wenn ich Änderungen vornehme.

Das sehe ich also am Ende der Testergebnisse auf dem 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.

Drücken Sie 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.

Drücken Sie dann 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.

Dies ist, nachdem ich die Datei 'index.es6.js' im Ordner 'Login' ausführen wollte

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

So führe ich Tests für eine bestimmte Datei aus.

deko
quelle
1

Ich habe jest so global installiert und bin dann gelaufen jest myFileToTest.spec.jsund es hat funktioniert

URL87
quelle
1

Sie haben zwei Möglichkeiten:

  • Option 1: Befehlszeile. Sie können den folgenden Befehl ausführen
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'

Dadurch müssen Sie Jest nicht global installieren. Sie verwenden den von Ihrem Projekt verwendeten Scherz.

  • Option 2: Wenn Sie VS Code verwenden , haben Sie ein großartiges Plugin, um dies zu tun: Jest Runner . Sie können damit nicht nur Tests Datei für Datei ausführen, sondern auch bestimmte Suiten und Spezifikationen, indem Sie mit der rechten Maustaste auf die Tests klicken, die Sie ausführen möchten.
Hay OUE
quelle
0

Jest verwendet das, was Sie übergeben, als Regex-Muster . Das wird passen für.

Wenn Sie eine bestimmte Testdatei ausführen möchten. Der beste Weg, dies zu tun, besteht darin, den vollständigen Weg dorthin zu präzisieren. (Sie können einen bestimmten relativen Pfad wie (src / XFolder / index.spec.ts) zu genau angeben.)

Der einfachste Weg, den vollständigen Pfad im Verzeichnis und unter Linux anzugeben, ist:

jest $PWD/index.spec.ts

Beachten Sie die Verwendung der Variablen $ PWD .

Geben Sie hier die Bildbeschreibung ein

Für Windows ! (aktualisiert werden)

Mohamed Allal
quelle
0

Mit Angular und Jest können Sie dies unter "scripts" zu package.json hinzufügen.

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

Um dann den Komponententest für eine bestimmte Datei auszuführen, können Sie diesen Befehl in Ihr Terminal schreiben

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