Проведіть лише один тест із Jest


96

Дуже просто, я хочу провести лише один тест з Jest.

Я ставлю it.onlyабо, describe.onlyале він все ще проводить багато тестів. Я думаю, що він запускає всі тести з мого останнього коміту, але він не повинен мати таку поведінку з onlyявно встановленим прапором, так?

Що спричиняє цю поведінку та як запустити один тест?



Якщо я прийму "дублікат прапора", він "позначить ваше запитання як дублікат, спрямуючи майбутніх читачів на оригінальне запитання та запобігаючи розміщенню тут подальших відповідей". Я не думаю, що вони абсолютно однакові, оскільки до кожного питання та відповіді застосовуються різні підходи.
jpenna

@jpenna: просто подивись оригінальне питання. Давались ті самі відповіді.
Дан Даскалеску,

Відповіді:


123

Jest паралелізує тестові запуски, і він заздалегідь не знає, які тести йому слід проводити, а які не слід виконувати. Це означає, що коли ви використовуєте "fit", він буде запускати лише один тест у цьому файлі, але все одно запускатиме всі інші тестові файли у вашому проекті .

fit, fdescribeі it.only, describe.onlyмають ту саму мету, пропускати інші тести, запускати лише мене.

Джерело: https://github.com/facebook/jest/issues/698#issuecomment-177673281


Використовуйте jestмеханізм фільтрації, коли ви запускаєте тести, як

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

Ви можете відфільтрувати тести за testnameабо filename, просто дотримуйтесь інструкцій у терміналі

введіть тут опис зображення

Натисніть p, а потім введіть ім'я файлу

введіть тут опис зображення

Тоді ви можете використовувати describe.onlyі it.onlyякий пропустить всі інші тести з відфільтрованого, перевіреного файлу.


1
Я роблю цей фільтр за файлом, але це дивно ... Тож .onlyєдине працює для тестів того самого файлу?
jpenna

2
Мені це подобається навіть більше, ніж .only, оскільки раніше я забував скасувати .only у вихідному коді та зафіксувати це.
Дзямід

3
Незважаючи на те, що тести пропускаються, все одно, здається, оцінює тестований код у кожному прикладі. Невже неможливо провести лише один тест у 2019 році?
adaam

@adaam Я не впевнений, чи правильно я зрозумів ваше запитання, тому, будь ласка, виправте мене, якщо я помиляюся. Якщо тести знаходяться в окремих файлах, виконується лише код у певному файлі, коли ви використовуєте шаблон для явного запуску тестів. Коли виконується код для певного файлу, весь код у цьому файлі аналізується, тому навіть якщо ви використовуєте it.onlyабо it.skipдля одного тесту, що містить синтаксичну помилку, всі тести не зможуть. Звичайно, код із файлів, виключених за шаблоном, виконуватися не буде. imgur.com/z9FlQEZ
Давид Карабін

@hinok Вставте console.log у ваш компонент "Карусель" і повторно запустіть тест-бігун. Для мене, навіть якщо я використовую if.onlyце console.logs з компонента Carousel стільки разів, скільки пропускаються / нескопійованих тестів для цього Компонента у ваших шаблонах годин.
adaam

29

it.onlyі describe.onlyпрацюють лише для модуля, в якому вони перебувають. Якщо у вас виникають проблеми з фільтруванням тестів у декількох файлах, ви можете скористатися jest -t name-of-specфільтрацією тестів, які відповідають назві специфікації (збіг із іменем у описі чи тесті).
Джерело: https://facebook.github.io/jest/docs/en/cli.html

Наприклад, я зосереджую тест, який я зараз пишу, так (із тестовим сценарієм у package.json):
npm test -- -t "test foo"


4
Це все ще виконує кожен окремий тест у моєму випадку, і я не уявляю, чому
Кенні

Єдине пояснення, про яке я можу подумати, - це те, що ви передаєте рядовий аргумент, який існує в кожному окремому тестовому імені (або тестовому describeблоці). Якщо це так, вам слід звузити точну назву тесту, на яку ви хочете сфокусуватись.
rodgobbi

Ця відповідь набагато більше підходить для іншого питання: stackoverflow.com/questions/42827054/…
千 郷

8

це так:

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

він протестує всі файли з іменем sometest.test.jsта відповідністю на основі опції -t, якщо ви хочете протестувати лише певний файл, ви можете зробити це:

jest src/user/.../sometest.test.js

Для тих, хто хоче застосувати цю опцію у файлі launch.jsonконфігурації VSCode, який ініціюватиме тести в конкретному тестовому випадку: medium.com/better-programming/…
Gus

8

Для мене це працює, якщо я використовую 2 такі параметри:

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

Прапори:

--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
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.