Выполнить только ОДИН тест с помощью Jest

Очень просто, я хочу запустить только один тест с помощью Jest.

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

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

Ответ 1

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, который пропустит все остальные тесты из фильтрованного, проверенного файла.

Ответ 2

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

Например, я фокусирую тест, который я сейчас пишу, следующим образом (с помощью скрипта test в package.json):
npm test -- -t "test foo"

Ответ 3

Не знаю, какая версия Jest представила это, но теперь вы можете использовать свойство -w со значением jest cli.

https://facebook.github.io/jest/docs/en/cli.html#maxworkers-num

- maxWorkers = num

Псевдоним: -w. Указывает максимальное количество работников, где рабочий пул будет запущен для запуска тестов. По умолчанию это количество ядер, доступных на вашем компьютере. Может быть полезно отрегулируйте это в средах с ограниченными ресурсами, таких как CI, но по умолчанию должен быть достаточным для большинства случаев использования.

например. в package.json вы можете иметь script "test" только с одним работником.

  "scripts": {
    "test": "jest -w 1"
  },

Это будет запускать только 1 тестовый файл сразу, но все тесты внутри тестового файла

Если вы хотите запустить только 1 тест в файле, используйте test.only

http://facebook.github.io/jest/docs/en/api.html#testonlyname-fn

И если вы хотите запустить все тесты в файле, но один за другим, я часто использую этот шаблон:

const tests = [];
test.push({input: 'foo', output: 'bar'});

tests.forEach((t) => {
  test(JSON.stringify(t), () => {
     expect(functionTesting(t.input)).toBe(t.output);
  })
})

Ответ 4

Для меня это работает, если я использую 2 параметра, как это:

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

--watch: необязательно

-f: будет выполнять фильтрацию ваших файлов, поэтому, если у вас много тестов с одинаковым именем, укажите полный путь к точному файлу

-t: работает с "опишите" имя или "это" название вашего теста

Ответ 5

это так:

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

он проверит все файлы с именем sometest.test.js, если вы хотите проверить только определенный файл, вы можете сделать это:

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