Запустите только ОДИН тест с Jest

95

Очень просто, я хочу провести всего один тест с Jest.

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

Что вызывает такое поведение и как запустить одиночный тест?

jpenna
источник
1
Возможный дубликат Как выполнить один тест с помощью Jest?
YPCrumble
Если я приму «флаг дублирования», он «пометит ваш вопрос как дубликат, направляя будущих читателей к исходному вопросу и предотвращая размещение здесь дальнейших ответов». Я не думаю, что они точно такие же, поскольку каждый вопрос и ответы используют разные подходы.
jpenna
@jpenna: просто посмотрите на исходный вопрос. Были даны те же ответы.
Дэн Даскалеску

Ответы:

122

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 08
2
Мне это нравится даже больше, чем .only, потому что я забывал отменять .only в исходном коде и фиксировать это.
Dziamid
3
Несмотря на то, что тесты пропускаются, кажется, что тестируемый код оценивается в каждом примере. Неужели в 2019 году нельзя провести только один тест?
adaam
@adaam Я не уверен, правильно ли я понял ваш вопрос, поэтому поправьте меня, если я ошибаюсь. Если тесты находятся в отдельных файлах, при использовании шаблона для явного запуска тестов выполняется только код в конкретном файле. Когда выполняется код для определенного файла, весь код в этом файле анализируется, поэтому даже если вы используете it.onlyили it.skipдля одного теста, содержащего синтаксическую ошибку, все тесты не пройдут. Конечно, код из файлов, исключенных по шаблону, выполняться не будет. imgur.com/z9FlQEZ
Давид Карабин
@hinok Вставьте console.log в компонент Carousel и повторно запустите средство запуска тестов. Для меня, даже если я использую if.onlyconsole.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"

Rodgobbi
источник
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
Hossein Alipour
источник
Для тех, кто хочет реализовать эту опцию в файле launch.jsonконфигурации VSCode, который будет запускать тесты в конкретном тестовом примере: medium.com/better-programming/…
Гас,
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
тонко
источник