Uruchom tylko JEDEN test z Jest

99

Chcę przeprowadzić tylko jeden test z Jest.

Używam it.onlylub describe.only, ale nadal działa wiele testów. Myślę, że uruchamia wszystkie testy od mojego ostatniego zatwierdzenia, ale nie powinien mieć tego zachowania z onlyjawnie ustawioną flagą, prawda?

Co powoduje takie zachowanie i jak mogę przeprowadzić pojedynczy test?

jpenna
źródło
Jeśli zaakceptuję „flagę duplikatów”, to „oznaczy Twoje pytanie jako zduplikowane, kierując przyszłych czytelników do pierwotnego pytania i uniemożliwiając publikowanie tutaj dalszych odpowiedzi”. Nie sądzę, aby były dokładnie takie same, ponieważ każde pytanie i odpowiedzi mają różne podejście.
jpenna
@jpenna: spójrz tylko na oryginalne pytanie. Dano te same odpowiedzi.
Dan Dascalescu

Odpowiedzi:

125

Jest zrównoleglenie przebiegów testów i nie wie z góry, które testy powinien uruchomić, a których nie. Oznacza to , że jeśli użyjesz „fit”, uruchomi się tylko jeden test w tym pliku. Ale nadal uruchamia wszystkie inne pliki testowe w twoim projekcie .

fit, fdescribeI it.only, describe.onlymają ten sam cel: pomija inne testy i uruchomić tylko mnie.

Źródło: https://github.com/facebook/jest/issues/698#issuecomment-177673281


Użyj mechanizmu filtrującego Jest. Kiedy przeprowadzasz testy,

jest --config=jest.config.json --watch

możesz filtrować testy według testnamelub filename. Wystarczy postępować zgodnie z instrukcjami wyświetlanymi na terminalu.

Tutaj wprowadź opis obrazu

Naciśnij p, a następnie wpisz nazwę pliku.

Tutaj wprowadź opis obrazu

Następnie możesz użyć polecenia describe.onlyi, it.onlyktóre pominie wszystkie inne testy z przefiltrowanego, przetestowanego pliku.

Dawid Karabin
źródło
1
Robię ten filtr po pliku, ale to dziwne ... Więc .onlydziała tylko dla testów tego samego pliku?
jpenna
2
Podoba mi się to jeszcze bardziej niż tylko, ponieważ zapomniałem cofnąć .only w kodzie źródłowym i zatwierdzić to.
Dziamid
3
Mimo że testy są pomijane, nadal wydaje się, że ocenia testowany kod w każdym przykładzie. Czy naprawdę nie ma sposobu, aby przeprowadzić tylko jeden test w 2019 roku?
adaam
@adaam Nie jestem pewien, czy dobrze zrozumiałem Twoje pytanie, więc popraw mnie, jeśli się mylę. Jeśli testy znajdują się w oddzielnych plikach, tylko kod w określonym pliku jest wykonywany, gdy używasz wzorca do jawnego uruchamiania testów. Kiedy wykonywany jest kod dla określonego pliku, cały kod w tym pliku jest analizowany, więc nawet jeśli użyjesz it.onlylub it.skipdla pojedynczego testu zawierającego błąd składni, wszystkie testy zakończą się niepowodzeniem. Oczywiście kod z plików wykluczonych przez wzorzec nie zostanie wykonany. imgur.com/z9FlQEZ
Dawid Karabin
@hinok Umieść console.log w komponencie Carousel i uruchom ponownie test runner. Dla mnie, nawet jeśli używam if.onlygo console.logs z komponentu Carousel tyle razy, ile jest pomijanych / niepominiętych testów dla tego komponentu w twoich wzorcach zegarka.
adaam
28

it.onlyi describe.onlydziałają tylko dla modułu, w którym się znajdują. Jeśli masz problemy z filtrowaniem testów w wielu plikach, możesz użyć jest -t name-of-specfiltrowania testów pasujących do określonej nazwy (dopasuj do nazwy w opisie lub teście).

Źródło: Jest CLI Options

Na przykład skupiam się na teście, który obecnie piszę w ten sposób (ze skryptem testowym w package.json):
npm test -- -t "test foo"

rodgobbi
źródło
4
To wciąż działa każdy test w moim przypadku i nie mam pojęcia dlaczego
Kenny
Jedynym wyjaśnieniem, jakie przychodzi mi do głowy, jest to, że przekazujesz argument w postaci ciągu, który istnieje w każdej nazwie testu (lub describebloku testowym ). W takim przypadku powinieneś zawęzić do dokładnej nazwy testu, na którym chcesz się skupić.
rodgobbi
Ta odpowiedź wydaje się bardziej odpowiednia na inne pytanie: stackoverflow.com/questions/42827054/…
千 木 郷
10

U mnie działa, jeśli używam dwóch parametrów takich jak ten:

yarn test --watch -f "src/...fullpath.../reducer.spec.js" -t "Name of the test"

Flagi:

--watch: is optional

-f: will do filtering of your files, so if you have a lot of tests with the same name, specify the full path to the exact file

-t: works with 'describe' name or 'it' name of your test
tonco
źródło
8

To jest tak:

jest sometest.test.js -t "some expression to match a describe or a test"

Przetestuje wszystkie pliki z nazwą sometest.test.jsi dopasowaniem na podstawie opcji -t. Jeśli chcesz przetestować tylko określony plik, możesz to zrobić:

jest src/user/.../sometest.test.js
hossein alipour
źródło
Dla tych, którzy chcą zaimplementować tę opcję w launch.jsonpliku konfiguracyjnym VSCode , który uruchomi testy w konkretnym przypadku testowym: medium.com/better-programming/ ...
Gus