Jak przetestować pojedynczy plik za pomocą Jest?

359

Jestem w stanie przetestować wiele plików przy użyciu Jest, ale nie mogę wymyślić, jak przetestować pojedynczy plik.

Mam:

  • Biegać npm install jest-cli --save-dev
  • Zaktualizowano package.json: `{..." scripts ": {" test ":" jest "} ...}
  • Napisał szereg testów.

Uruchamianie npm testdziała zgodnie z oczekiwaniami (obecnie wykonuje 14 testów).

Jak przetestować pojedynczy plik, np. Test app/foo/__tests__/bar.spec.js?

Próbowałem uruchomić npm test app/foo/__tests__/bar.spec.js(z katalogu głównego projektu), ale pojawia się następujący błąd:

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

Dzięki

Muszkiet
źródło

Odpowiedzi:

296

Aby uruchomić określony test, musisz użyć jestpolecenia. npm testnie będzie działać. Aby uzyskać dostęp jestbezpośrednio z wiersza poleceń, zainstaluj go za pomocą npm i -g jest-clilub yarn global add jest-cli.

Następnie po prostu uruchom swój konkretny test za pomocą jest bar.spec.js.

Uwaga : Nie musisz wprowadzać pełnej ścieżki do pliku testowego. Argument jest interpretowany jako wyrażenie regularne. Wystarczy dowolna część pełnej ścieżki, która jednoznacznie identyfikuje plik.

ncuillery
źródło
5
Niestety to nie działa dla mnie. Bieganie jest bar.spec.jsdaje jest: command not found. Potwierdziłem, że Jest zainstalowany ( npm list -g jestpokazuje [email protected]). FWIW, kiedy uruchamiam npm test, używa go jest-cli.
Musket
4
Tak, jest-clijest właściwym modułem, zainstaluj go globalnie npm install -g jest-cli. jestw npm jest ... coś innego
ncuillery
56
To jest niepoprawne działający test npm nie oznacza, że ​​jest zainstalowany na całym świecie. To po prostu oznacza, że ​​jest zainstalowany w twoim projekcie.
Chiedo
20
Jak powiedział @ChiedoJohn. Aby uruchomić go bez instalowania globalnie, możesz uruchomić to z katalogu głównego swojej aplikacji:node_modules/.bin/jest args
Eddie Monge Jr
3
Jeśli używasz domyślnej konfiguracji jaśminu, możesz skoncentrować pojedynczy test, używając fitzamiast it.
eremzeit,
380

Wszystko, co musisz zrobić, to intonować magiczną inkantację:

npm test -- SomeTestFileToRun

Autonomiczna --jest * nix magia do oznaczania końca opcji, co oznacza (dla NPM), że wszystko później jest przekazywane do uruchamianego polecenia, w tym przypadku jest. Na marginesie możesz wyświetlić uwagi dotyczące używania, mówiąc

npm test -- --help

W każdym razie intonowanie

npm test -- Foo

uruchamia testy w nazwanym pliku ( FooBar.js). Należy jednak pamiętać, że:

  • Jest traktuje nazwę jako rozróżniającą wielkość liter, więc jeśli używasz systemu plików bez rozróżniania wielkości liter, ale zachowującego wielkość liter (takiego jak Windows NTFS), możesz napotkać coś, co wydaje się dziwne.

  • Wygląda na to, że traktuje specyfikację jako przedrostek.

Tak zrobi powyższa inkantacja

  • Uruchom FooBar.js, Foo.jsaFooZilla.js
  • Ale NIE uciekaj foo.js
Nicholas Carey
źródło
Dzięki, niestety pojawia się ten sam błąd podczas uruchamiania tego:npm ERR! Error: ENOENT, open '<path to project>/node_modules/<name of file>/package.json'
Musket
1
czy jest jakaś alternatywna metoda uruchamiania testów jest oprócz linii poleceń? , tak jakbym wysłał prośbę do mojego istniejącego projektu, resztę interfejsu API da mi problem z tokenem CSRF. Jak mam skonfigurować testowanie mojego istniejącego projektu? aby zaczął obsługiwać żądanie przy użyciu „/ rest-api” zamiast „ localhost: 8000 / rest-api
Suyog Sawant
@ SuyogSawant: to nie jest komentarz. to pytanie samo w sobie. Powinieneś zapytać o to tutaj na StackOverflow.
Nicholas Carey
1
w moim przypadku proste npm test ToDoForm.test.jsdziałało, a jest ToDoForm.test.jsnie działało
Tomasz Mularczyk
twój drugi punkt dotyczący rozróżniania wielkości liter nie odpowiada inkantacji, którą podałeś powyżej.
NSjonas
38

Aby uruchomić test indywidualny:

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

-t- po wstawieniu wyrażenia regularnego zawierającego nazwę testu.

cabaji99
źródło
1
Niesamowite! Działa świetnie!
Flavio
21

Używanie npm testnie oznacza, że ​​jest instalowany globalnie. Oznacza to po prostu, że „test” jest odwzorowany na użycie jest w pakiecie.json

Oto, co zadziałało dla mnie na poziomie głównym projektu:

node_modules/.bin/jest [args]

argumentami może być plik testowy, który chcesz uruchomić, lub katalog zawierający wiele plików.

AeroHil
źródło
Pracował dla mnie;)
wogsland
1
dzięki! to było dla mnie bardzo przydatne!
Izaak
5
skrótem do uruchamiania plików binarnych node_modules/.binjest użycie npxpolecenia. Na przykładnpx jest [args]
Sergio Mazzoleni
16

jeśli używasz yarn, możesz dodać plik .spec.jslub .test.jsbezpośrednio po:

yarn test src/lib/myfile.test.js

To jest część mojej package.jsoninstalacji z instalacją jako pakiet lokalny (usunąłem odpowiednie części):

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

}
Andreas Heissenberger
źródło
11

Możesz użyć nazwy pliku z npm test --:

npm test -- fileName.jsx 
Hilal Aissani
źródło
1
to powinna być odpowiedź!
Allan Stepps
To dosłownie druga odpowiedź - autor: @NicholasCarey
Jacksonkr,
6

Jeśli działa npm >= 5.2.0i masz zainstalowany JEST lokalnie jako devDependenciesz npm i -d jestwas może działać JEST na danym pliku, wykonującnpx jest /path/to/your/spec.js

bmaggi
źródło
5

Używamy nrwl-NX z kątowego . W takim przypadku możemy użyć tego polecenia:

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

uwagi:

  • npm testuruchomi skrypt testowy określony w package.json: "test:client": "ng test client"
  • w ten sposób reszta polecenia cmd zostanie przekazana do testu ng
    • <ng-project> to nazwa projektu w angular.json
      • kiedy pominiesz ten parametr, zostanie użyty "defaultProject"(określony w angular.json) (więc musisz go określić, gdy test nie znajduje się w domyślnym projekcie)
    • następnie musimy sprawdzić, który konstruktor jest używany:
      • w angular.jsonprzejdź do "project"- "<ng-project>"- "architect"-"test"
      • i sprawdź "builder", która w naszym przypadku jest:"@nrwl/jest:jest"
    • teraz, gdy znamy konstruktora, musimy znaleźć dostępne parametry linii cmd
      • w wierszu polecenia uruchom, npm test server -- --helpaby zobaczyć wszystkie dostępne opcje
      • lub sprawdź dokumenty online
    • jedną z tych opcji jest --testFiletutaj używana
TmTron
źródło
To ten, który zrobił to dla mnie, ponieważ używamy nx. Dziękuję Ci.
user906573
4

W ten sposób dynamicznie uruchamiam testy dla określonego pliku bez ponownego uruchamiania testu. Mój projekt reagowania został utworzonycreate-react-app

więc obserwuje test pod kątem zmian, automatycznie uruchamia test po wprowadzeniu zmian.

Tak właśnie widzę na końcu wyników testu na terminalu.

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.

Naciśnij 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.

następnie naciśnij 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.

to jest po tym, jak chciałem uruchomić plik „index.es6.js” w folderze „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

Tak właśnie uruchamiam testy na określonym pliku.

deko
źródło
1

Właśnie zainstalowałem jest globalnie, a potem uruchomiłem jest myFileToTest.spec.jsi działało

URL87
źródło
1

Masz dwie opcje:

  • Opcja 1: wiersz poleceń. Możesz uruchomić następujące polecenie
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'

Pozwala to uniknąć instalacji Jest na całym świecie. Używasz żartu używanego przez twój projekt.

  • Opcja 2: Jeśli używasz VS Code , masz świetną wtyczkę, aby to zrobić: Jest Runner . Pozwala nie tylko uruchamiać testy plik po pliku, ale nawet określone pakiety i specyfikacje, klikając prawym przyciskiem myszy testy, które chcesz uruchomić.
Hay OUE
źródło
0

JEST użyje czego uchodzić za regex wzór . To będzie pasować do.

Jeśli chcesz uruchomić określony plik testowy. Następnie najlepszym sposobem na to jest określenie pełnej ścieżki do niego. (Możesz zbyt precyzyjnie określić określoną ścieżkę względną, taką jak (src / XFolder / index.spec.ts)).

Najprostszym sposobem na podanie pełnej ścieżki znajdującej się w katalogu i w systemie Linux jest:

jest $PWD/index.spec.ts

Zwróć uwagę na użycie zmiennej $ PWD .

wprowadź opis zdjęcia tutaj

Dla Windowsa ! (do zaktualizowania)

Mohamed Allal
źródło
0

W Angular i Jest możesz dodać to do package.json w „scripts”

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

Następnie, aby uruchomić test jednostkowy określonego pliku, możesz napisać to polecenie w swoim terminalu

npm run test:debug modules/myModule/someTest.spec.ts
Photonic
źródło