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


95

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

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

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



Если я приму «флаг дублирования», он «пометит ваш вопрос как дубликат, направляя будущих читателей к исходному вопросу и предотвращая размещение здесь дальнейших ответов». Я не думаю, что они точно такие же, поскольку каждый вопрос и ответы используют разные подходы.
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"


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/…
Гас,

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.