Как запустить один тест с помощью 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
просто отфильтровывает другие тесты в том же файле. Поэтому тесты в других файлах все равно будут выполняться.
Таким образом, для запуска одного теста есть два подхода:
При любом из указанных выше подходов 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",...)
.
Примечания:
- Для Windows замените
node_modules/.bin/jest
на node_modules\jest\bin\jest.js
.
- Такой подход позволяет отлаживать запущенный скрипт. Чтобы включить отладку, добавьте в команду параметр
'--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"
Теперь вы можете управлять именем запускаемых тестов с помощью более короткой команды.
Примечания:
- Команда
'jest'
будет работать со сценариями NPM, потому что
npm делает "./node_modules/.bin"
первой записью в переменной среды PATH
при запуске любых сценариев жизненного цикла, поэтому это будет работать нормально, даже если ваша программа не установлена глобально (блог NPM)
- Похоже, что этот подход не позволяет отладку, потому что 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",
}
он фактически делает то же самое, что и команды, описанные ранее в этом ответе. Теперь, когда все готово, мы можем запустить любой тест без необходимости переписывать параметры команды вручную.
Здесь все, что вам нужно сделать:
- Выберите созданную конфигурацию запуска на панели отладки:
- Откройте файл с тестами в редакторе кода и выберите название теста, который вы хотите протестировать (без кавычек):
- Нажмите кнопку
'F5'
.
И вуаля!
Теперь для запуска любого теста просто откройте его в редакторе, выберите его имя и нажмите F5.
К сожалению, это не будет "вуаля" на машинах Windows, потому что они заменяют (кто знает почему) переменную ${relativeFile}
на путь с обратными слешами, и Jest не поймет такой путь.
Примечания:
- Для запуска под отладчиком не забудьте добавить параметр
'--inspect-brk'
.
- В этом примере конфигурации у нас нет параметра конфигурации 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 ...
- простой вызов
jest
работает, если он установлен глобально (как в случае с npm install -g jest), не очень чистый способ обработки зависимостей
- если вы установили jest только локально в пакете и хотите вызвать jest-скрипт без обхода сценария npm, вы можете использовать
npx jest -i ...
=> это именно то, для чего предназначен npx. спасает вас от письма ./node_modules/.bin/...
Ответ 12
Теперь есть хороший плагин jest для этого jest-watch-typeahead
который делает этот процесс намного проще.