Як запустити єдиний тест за допомогою Jest?


355

У мене є тест "працює з вкладеними дітьми" у файлі fix-order-test.js.

Запустивши нижче, виконуються всі тести у файлі.

jest fix-order-test

Як запустити лише один тест? Наведене нижче не працює під час пошуку файлу вказаного регулярного виразу.

jest 'works with nested children'


оскільки ви використовуєте командний рядок --testNamePattern 'works with nested children' jer
steven87vt

@BioGenX: посилання зараз розірвано
Дан Даскалеску

Відповіді:


427

У командному рядку використовуйте прапор --testNamePatternабо-t

jest -t 'fix-order-test'

Це запустить лише тести, які відповідають шаблону імені тесту, який ви надаєте. Це в документах Jest .

Інший спосіб - запустити тести в режимі перегляду, jest --watchа потім натиснути, pщоб відфільтрувати тести, ввівши ім'я тестового файлу або tзапустити одне ім’я тесту.


Якщо у вас itвсередині describeблоку, вам доведеться бігти

jest -t '<describeString> <itString>'

Я отримую нерозпізнані варіанти для -t. Так, у документації це згадується. Прапор додано в 16.0. Я на останній версії. vic -help, здається, не згадує прапор. Дякую.
vijayst

12
Лише зауважте, що це тестовий зразок конкретної назви тесту всередині it()функції, а не ім'я файлу. Що я думав.
HussienK

70
Якщо ви використовуєте npm-тест, вам потрібно зробитиnpm test -- -t "fix order test"
Sarsaparilla

3
Це працює для мене, але це також пропускає кожен інший тест у проекті, який є повільним для великих проектів. Вказання конкретного тестового файлу, у якому справді знаходиться тест, допомагає:./node_modules/.bin/jest --config=./.jest.config.json ./src/x/y/sites.js/sitesWorker.test.js -t 'given only incorrect sites'
anon58192932

Працює для мене із зазначенням <describeString>, я помітив, що це величини повільніше, ніж мокка греп (-g 'searchString') - але я
прийму

124

Документація про Jest рекомендує наступне:

Якщо тест виявляється невдалим, однією з перших речей, що потрібно перевірити, має бути тест, чи не є тест, коли це єдиний тест, який виконується. У Jest просто запустити лише один тест - просто тимчасово змінити цю test команду на atest.only

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

або

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

7
Для мене працює з жаром 20.0.4. Хоча це лише пропускає решту тестів у цьому файлі. Тести інших файлів продовжують виконуватись, якщо ви вже не обмежили виконання одного файлу.
Холф

7
Це все ж таки жарт - адже він запускає тести асинхронно, він, ймовірно, не може визначити, який тест потрібно запустити в якому файлі з самого початку. Таким чином, він запускатиме всі файли за замовчуванням і ВІД файлів перевіряє test.only. Тож якщо ви хочете запустити лише один тест у файлі, який має безліч тестових випадків у наборі тестів, що складається з багатьох файлів, вам, на жаль, потрібно запустити цей єдиний файлjest myTestFile.test.js
лускатий

@johnslay: Це так, тільки що перевірив
лускатий

@flaky Я думаю, я хотів сказати, що це не працює при запуску npm test. Вам доведеться запустити файл самостійно або натиснути, pщоб встановити фільтр.
johnslay

3
@johnslay добре, дякую, що прочитав попередні коментарі, перш ніж написати свою відповідь, я думаю / с :)
лускатий

55

Як згадується в інших відповідях, test.onlyпросто фільтрують інші тести в тому ж файлі . Тож тести в інших файлах все одно запускатимуться.

Отже, для проведення єдиного тесту є два підходи:

  • Варіант 1: Якщо ваше тестове ім'я унікальне, ви можете ввести, tперебуваючи в режимі перегляду, і ввести ім'я тесту, який ви хочете запустити.

  • Варіант 2:

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

З будь-яким із підходів, описаних вище, Jest запустить лише один тест у вказаному вами файлі.


53

Повна команда для запуску одного тесту 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 робить "./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. Виберіть поточно створений конфігурацію запуску на панелі налагодження:

виберіть команду запуску на панелі налагодження VSCode

  1. Відкрийте файл із тестами в редакторі коду та виберіть ім'я тесту, який ви хочете протестувати (без лапок):

виберіть ім'я тесту

  1. Натисніть 'F5'кнопку.

І вуаля!

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

На жаль, це не буде "вуаля" на машинах Windows, оскільки вони замінюють (хто знає чому) ${relativeFile}змінну тим, що шлях перевернув косою рисою, і Jest не зрозуміє такого шляху.

Зауваження:

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

1
Відмінно! Це має бути прийнятою відповіддю. Особливо, якщо це додає згадки про npxзначно спрощення виклику Jest, незалежно від ОС.
Дан Даскалеску

19

Ви також можете використовувати 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);
});

1
Не впевнений, чому ця відповідь була спростована, здається, вона відповідає на питання і працює.
mbillard

1
xitзробив для мене роботу, але fitні. я використовую jest@22.4.4.
Гінріх

fitпрацює для mene@23.1.0 для мене.
jcubic

Я думаю, що головний недолік цього підходу полягає в тому, що - якщо ви просто намагаєтеся провести детальний аналіз на одному тесті, щоб виправити помилку - це тягне за собою непотрібні зміни в базових тестових файлах. Якщо з будь-якої причини ви хочете зберегти тестовий код (через комісії, скажімо), це може мати сенс.
webelo

fвін працює лише в одному файлі.
Сергій

14

Як було сказано вище, ви можете запустити команду

jest -t 'fix-order-test'

Якщо у вас itвсередині describeблоку, вам доведеться бігти

jest -t '<describeString> <itString>'

13

Якщо ви jestпрацюєте в якості команди сценарію, що - щось на зразок npm test, вам потрібно використовувати наступну команду , щоб змусити його працювати:

npm test -- -t "fix order test"

8

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

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

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

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

jest 'test 1' може також працювати, якщо ім'я тесту унікальне.


4

У коді VS це дозволить мені запустити / налагодити лише тест 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 перейдіть до перегляду налагодження (Shift + Cmd + D).
  • У спадному меню вгорі виберіть Jest Current File.
  • Клацніть зелену стрілку для запуску цього тесту.

У моєму випадку ваш конфігурація виконує лише один тест (with it.only (...)), але він не зупиняється на
точках перерви

Отримати JavaScript для потрапляння на точки відключення у відладчику може бути складним через його асинхронність. У коді VS пограйте з тим, де ви розмістите свої точки пробою, плюс команди в меню налагодження, поки він не потрапить на них. Якщо вони продовжують пропускати точки прориву, помістіть їх ВІДКРИТТЯ у своєму коді. Якщо 1 файл викликає функцію в іншому файлі, поставте точку перерви на цей виклик функції, а потім "Крок увімкніть" виклик для переходу файлів. Пограйте з цими командами налагодження: "Крок вперед, крок у себе, крок уперед, продовження"
Реймонд Ган

На насправді, вам не потрібно "scripts": { "test": "jest" }в package.jsonтому , що ви вказали повний шлях в "program"параметрі в launch.json.
Сергій

3

Ось моя думка:

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

Примітки:

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

3

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

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

0

Зараз є гарний плагін для цього називається, jest-watch-typeaheadвін робить цей процес набагато простішим.


0
npm run test -- test-name

Це буде працювати лише в тому випадку, якщо назва вашої тестової специфікації унікальна. Код вище буде посилатися

файл з таким ім'ям: test-name.component.spec.ts

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.