Как запустить один тест с помощью Jest?

У меня есть тест "работает с вложенными детьми" в файле fix-order-test.js.

Запуск ниже запускает все тесты в файле.

jest fix-order-test

Как запустить только один тест? Ниже не работает, поскольку он ищет файл указанного регулярного выражения.

jest 'works with nested children'

Ответ 1

Из командной строки используйте флаг --testNamePattern или -t

jest -t 'fix-order-test'

Это будет запускать только те тесты, которые соответствуют указанному вами шаблону имени теста. Это в Jest Docs.

Другой способ - запустить тесты в режиме наблюдения jest --watch, а затем нажать p, чтобы отфильтровать тесты, введя имя файла теста или t, чтобы запустить одно имя теста.

Ответ 2

Документация Jest рекомендует следующее:

Если тест не пройден, первым делом необходимо проверить провалился ли тест, когда он единственный тест, который выполняется. В шутку просто запустить только один тест - просто временно измените его test команда для test.only

test.only('this will be the only test that runs', () => {
   expect(true).toBe(false);
});

Ответ 3

Как упоминалось в других ответах, test.only просто отфильтровывает другие тесты в том же файле. Поэтому тесты в других файлах все равно будут выполняться.

Таким образом, для запуска одного теста есть два подхода:

  • Вариант 1. Если ваше имя теста уникально, вы можете ввести t в режиме просмотра и ввести имя теста, который вы хотите выполнить.

  • Вариант 2:

    1. Нажмите p в режиме просмотра, чтобы ввести регулярное выражение для имени файла, которое вы хотите запустить. (Соответствующие команды, подобные этой, отображаются, когда вы запускаете Jest в режиме просмотра).
    2. Измените it на it.only в тесте, который вы хотите выполнить.

При любом из указанных выше подходов Jest запускает только один тест в указанном вами файле.

Ответ 4

Полная команда для запуска одного теста Jest

Команда:

node <path-to-jest> -i <you-test-file> -c <jest-config> -t "<test-block-name>"

  • <path-to-jest>:
    • Windows: node_modules\jest\bin\jest.js
    • Другие: node_modules/.bin/jest
  • -i <you-test-file>: путь к файлу с тестами (js или ts)
  • -c <jest-config>: путь к отдельному файлу конфигурации Jest (JSON), если вы сохраняете свою конфигурацию Jest в package.json, вам не нужно указывать этот параметр (Jest найдет его без вашей помощи)
  • -t <the-name-of-test-block>: фактически это имя (первый параметр) блока describe(...), it(...) или test(...).

Пример:

describe("math tests", () => {

  it("1 + 1 = 2", () => {
    expect(1 + 1).toBe(2);
  });

  it("-1 * -1 !== -1", () => {
    expect(-1 * -1).not.toBe(-1);
  });

});

Итак, команда

node node_modules/jest/bin/jest.js -i test/math-tests.js -c test/tests-config.json -t "1 + 1 = 2"

будет тестировать it("1 + 1 = 2", ...), но если вы измените параметр -t на "math tests", он будет запускать оба теста из блока describe("math tests",...).

Примечания:

  1. Для Windows замените node_modules/.bin/jest на node_modules\jest\bin\jest.js.
  2. Такой подход позволяет отлаживать запущенный скрипт. Чтобы включить отладку, добавьте в команду параметр '--inspect-brk'.

Выполнение одного Jest-теста через сценарии NPM в package.json

Установив Jest, вы можете упростить синтаксис этой команды (см. выше), используя сценарии NPM. В "package.json" добавьте новый скрипт в раздел "scripts":

"scripts": {
  "test:math": "jest -i test/my-tests.js -t \"math tests\"",
}

В этом случае мы используем псевдоним 'jest' вместо записи полного пути к нему. Кроме того, мы не указываем путь к файлу конфигурации, так как мы можем также поместить его в "package.json", и Jest будет рассматривать его по умолчанию. Теперь вы можете запустить команду:

npm run test:math

и будет выполнен блок "math tests" с двумя тестами. Или, конечно, вы можете указать один конкретный тест по имени.

Другой вариант - извлечь параметр <the-name-of-test-block> из сценария "test:math" и передать его из команды NPM:

package.json:

"scripts": {
  "test:math": "jest -i test/my-tests.js -t",
}

Команда:

npm run test:math "math tests"

Теперь вы можете управлять именем запускаемых тестов с помощью более короткой команды.

Примечания:

  1. Команда 'jest' будет работать со сценариями NPM, потому что

    npm делает "./node_modules/.bin" первой записью в переменной среды PATH при запуске любых сценариев жизненного цикла, поэтому это будет работать нормально, даже если ваша программа не установлена глобально (блог NPM)

  2. Похоже, что этот подход не позволяет отладку, потому что Jest запускается через его двоичный файл /CLI, а не через node.

Запуск выбранного Jest-теста в коде Visual Studio

Если вы используете код Visual Studio, вы можете воспользоваться им и запустить текущий выбранный тест (в редакторе кода), нажав кнопку F5. Для этого нам потребуется создать новый блок конфигурации запуска в файле ".vscode/launch.json". В этой конфигурации мы будем использовать предопределенные переменные, которые заменяются соответствующими (к сожалению, не всегда) значениями при запуске. Из всех доступных нам интересны только эти:

  • ${relativeFile} - текущий открытый файл относительно ${workspaceFolder}
  • ${selectedText} - текущий выделенный текст в активном файле

Но перед записью конфигурации запуска мы должны добавить скрипт 'test' в наш 'package.json' (если у нас его еще нет).

package.json:

"scripts": {
  "test": "jest"
}

тогда мы можем использовать его в нашей конфигурации запуска.

Запустить конфигурацию:

{
  "type": "node",
  "request": "launch",
  "name": "Run selected Jest test",
  "runtimeExecutable": "npm",
  "runtimeArgs": [
    "run-script",
    "test"
  ],
  "args": [
    "--",
    "-i",
    "${relativeFile}",
    "-t",
    "${selectedText}"
  ],
  "console": "integratedTerminal",
}

он фактически делает то же самое, что и команды, описанные ранее в этом ответе. Теперь, когда все готово, мы можем запустить любой тест без необходимости переписывать параметры команды вручную.

Здесь все, что вам нужно сделать:

  1. Выберите созданную конфигурацию запуска на панели отладки:

select launch config in the VSCode debug panel

  1. Откройте файл с тестами в редакторе кода и выберите название теста, который вы хотите протестировать (без кавычек):

select test name

  1. Нажмите кнопку 'F5'.

И вуаля!

Теперь для запуска любого теста просто откройте его в редакторе, выберите его имя и нажмите F5.

К сожалению, это не будет "вуаля" на машинах Windows, потому что они заменяют (кто знает почему) переменную ${relativeFile} на путь с обратными слешами, и Jest не поймет такой путь.

Примечания:

  1. Для запуска под отладчиком не забудьте добавить параметр '--inspect-brk'.
  2. В этом примере конфигурации у нас нет параметра конфигурации Jest, предполагая, что он включен в 'package.json'.

Ответ 5

Вы также можете использовать f или x для фокусировки или исключения теста. Например

fit('only this test will run', () => {
   expect(true).toBe(false);
});

it('this test will not run', () => {
   expect(true).toBe(false);
});

xit('this test will be ignored', () => {
   expect(true).toBe(false);
});

Ответ 6

Как сказано выше, вы можете выполнить команду

jest -t 'fix-order-test'

Если у вас есть it внутренняя часть describe блока, вы должны запустить

jest -t '<describeString> <itString>'

Ответ 7

в последней версии Jaest вы можете использовать одно из следующих действий, чтобы выполнить только один тест, то же самое для набора тестов.

it.only('test 1', () => {})

test.only('test 1', () => {})

fit('test 1', () => {})

jest 'test 1' тоже может работать, если имя теста уникально.

Ответ 8

Если у вас jest работает как команда скрипта, что-то вроде npm test, вам нужно использовать следующую команду, чтобы она работала:

npm test -- -t "fix order test"

Ответ 9

В VS Code это позволяет мне запускать/отлаживать только 1 Jest тест с точками останова: https://github.com/Microsoft/vscode-recipes/tree/master/debugging-jest-tests

Мой launch.json имеет это внутри:

{
  "version": "0.2.0",
  "configurations": [
    {
      "type": "node",
      "request": "launch",
      "name": "Jest All",
      "program": "${workspaceFolder}/node_modules/.bin/jest",
      "args": ["--runInBand"],
      "console": "integratedTerminal",
      "internalConsoleOptions": "neverOpen",
      "windows": {
        "program": "${workspaceFolder}/node_modules/jest/bin/jest",
      }
    },
    {
      "type": "node",
      "request": "launch",
      "name": "Jest Current File",
      "program": "${workspaceFolder}/node_modules/.bin/jest",
      "args": ["${relativeFile}"],
      "console": "integratedTerminal",
      "internalConsoleOptions": "neverOpen",
      "windows": {
        "program": "${workspaceFolder}/node_modules/jest/bin/jest",
      }
    }
  ]
}

и это в package.json:

  "scripts": {
    "test": "jest"
  }
  • Чтобы запустить 1 тест, в этом тесте измените test (или it) на test.only (или it.only). Чтобы запустить 1 набор тестов (несколько тестов), измените describe для describe.only.
  • Установите точку останова (ов), если хотите.
  • В VS Code перейдите в Debug View (Shift + Cmd + D).
  • Из выпадающего меню вверху выберите Jest Current File.
  • Нажмите зеленую стрелку, чтобы запустить этот тест.

Ответ 10

Вот мой прием:

./node_modules/.bin/jest --config test/jest-unit-config.json --runInBand src/components/OpenForm/OpenForm.spec.js -t 'show expanded'

Заметки:

  • ./node_modules/.bin/... - это прекрасный способ получить доступ к локально установленному jest (или mocha или...) двоичному ./node_modules/.bin/... который поставляется с локально установленным пакетом. (да, в ваших сценариях npm вы можете jest ни с чем раньше, но это удобно в командной строке... (это также хороший старт для вашей конфигурации отладки, в зависимости от того, какая IDE вы используете...)
  • ваш проект может не иметь набора параметров конфигурации. Но если это произойдет (загляните в скрипты в package.json), это то, что вам нужно.
  • --runInBand - как сказано, не знаю о вашей конфигурации, но если вы сосредоточитесь на разработке/исправлении одного теста, вы скорее не захотите иметь дело с веб-работниками...
  • да, вы можете дать весь, явный путь к вашему файлу
  • возможно, вы можете использовать -t чтобы не запускать все тесты в этом файле, а только один (здесь: тот, у которого есть что-то с ' show expanded в его имени). Тот же эффект может быть достигнут путем склеивания .only() в этот файл.

Ответ 11

просто небольшое дополнение, потому что, кажется, была какая-то драка, если использовать ./node_modules/.bin/jest -i ... или просто jest -i ... или npm test -- -i ...

  1. простой вызов jest работает, если он установлен глобально (как в случае с npm install -g jest), не очень чистый способ обработки зависимостей
  2. если вы установили jest только локально в пакете и хотите вызвать jest-скрипт без обхода сценария npm, вы можете использовать npx jest -i ... => это именно то, для чего предназначен npx. спасает вас от письма ./node_modules/.bin/...

Ответ 12

Теперь есть хороший плагин jest для этого jest-watch-typeahead который делает этот процесс намного проще.