Как проверить один файл с помощью Jest?

361

Я могу протестировать несколько файлов с помощью Jest, но я не могу понять, как проверить один файл.

Я имею:

  • Запустить npm install jest-cli --save-dev
  • Обновлено package.json: `{..." scripts ": {" test ":" jest "} ...}
  • Написан ряд тестов.

Запуск npm testработает, как и ожидалось (в настоящее время выполняется 14 тестов).

Как проверить один файл, например, проверить app/foo/__tests__/bar.spec.js?

Я попытался запустить npm test app/foo/__tests__/bar.spec.js(из корня проекта), но я получаю следующую ошибку:

npm ERR! Error: ENOENT, open '<path to project>/node_modules/app/foo/__tests__/bar.spec.js/package.json'

Спасибо

мушкет
источник

Ответы:

298

Для запуска определенного теста вам нужно использовать jestкоманду. npm testне будет работать. Чтобы получить доступ jestнепосредственно из командной строки, установите его с помощью npm i -g jest-cliили yarn global add jest-cli.

Затем просто запустите свой конкретный тест с jest bar.spec.js.

Примечание . Вам не нужно вводить полный путь к тестовому файлу. Аргумент интерпретируется как регулярное выражение. Достаточно любой части полного пути, которая однозначно идентифицирует файл.

ncuillery
источник
5
К сожалению, это не работает для меня. Бег jest bar.spec.jsдает jest: command not found. Я подтвердил, что Jest установлен ( npm list -g jestпоказывает jest@0.1.37). FWIW, когда я бегу, используя npm testего использует jest-cli.
Мушкет
4
Да, jest-cliэто правильный модуль, установите его глобально npm install -g jest-cli. jestв нпм есть ... что-то еще
ncuillery
56
Это неверно Тестовая работа npm не означает, что jest установлен глобально. Это просто означает, что шутка установлена ​​в вашем проекте.
Кьедо
20
Как сказал @ChiedoJohn. Чтобы запустить его, не устанавливая глобально, вы можете запустить его из корня своего приложения:node_modules/.bin/jest args
Эдди Монж младший
3
Если вы используете настройку жасмина по умолчанию, вы можете сосредоточиться на одном тесте, используя fitвместо it.
eremzeit
382

Все, что вам нужно сделать, это повторять заклинание магии:

npm test -- SomeTestFileToRun

Автономным --является * nix magic для обозначения конца опций, что означает (для NPM), что в этом случае все после этого передается выполняемой команде jest. Кроме того, вы можете отобразить заметки об использовании шутки, сказав

npm test -- --help

Во всяком случае, пение

npm test -- Foo

запускает тесты в названном файле ( FooBar.js). Вы должны отметить, однако, что:

  • Jest рассматривает имя как регистрозависимое, поэтому, если вы используете регистронезависимую, но сохраняющую регистр файловую систему (например, Windows NTFS), вы можете столкнуться с тем, что кажется странным.

  • Похоже, Jest рассматривает спецификацию как префикс.

Так что вышеприведенное заклинание

  • Run FooBar.js, Foo.jsиFooZilla.js
  • Но НЕ беги foo.js
Николас Кэри
источник
Спасибо, к сожалению, я получаю ту же ошибку при запуске этого:npm ERR! Error: ENOENT, open '<path to project>/node_modules/<name of file>/package.json'
Мушкет
1
Есть ли какой-нибудь альтернативный метод для запуска шуточных тестов, кроме командной строки? , как будто я делаю пост-запрос в мой существующий проект, остальные API-интерфейсы вызовут у меня проблему с токеном CSRF. Как я могу настроить Jest тестирование для моего существующего проекта? так что он начнет обслуживать запрос, используя '/ rest-api' вместо ' localhost: 8000 / rest-api '
Suyog Sawant
@SuyogSawant: это не комментарий. это вопрос сам по себе. Вы должны спросить об этом здесь, на StackOverflow.
Николас Кэри
1
в моем случае просто npm test ToDoForm.test.jsработал, а jest ToDoForm.test.jsне
Томаш Муларчик
Ваше второе замечание о чувствительности к регистру не соответствует приведенному выше заклинанию.
NSjonas
38

Чтобы запустить индивидуальный тест:

npm test -t ValidationUtil # `ValidationUtil` its my module `ValidationUtil.spec.js`

-t- после этого поставить регулярное выражение, содержащее название теста.

cabaji99
источник
1
Потрясающие! Работал отлично!
Флавио
21

Использование npm testне означает, что шутка устанавливается во всем мире. Это просто означает, что «test» сопоставлен с использованием jest в вашем package.json

Вот что сработало у меня на корневом уровне проекта:

node_modules/.bin/jest [args]

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

AeroHil
источник
Работал на меня;)
wogsland
1
Спасибо! это было очень полезно для меня!
Исаак
5
ярлык для запуска двоичных файлов в node_modules/.binтом, чтобы использовать npxкоманду. Напримерnpx jest [args]
Серхио
16

если вы используете, yarnвы можете добавить .spec.jsили .test.jsфайл сразу после:

yarn test src/lib/myfile.test.js

Это часть моей package.jsonустановки с помощью jest в качестве локального пакета (удалены соответствующие части):

{
...
  "scripts": {
    "test": "jest",
    "testw": "jest --watch",
    "testc": "jest --coverage",
...
  },
  "devDependencies": {
    "jest": "^18.1.0",
    ...
  },

}
Андреас Хайссенбергер
источник
11

Вы можете использовать имя файла с npm test --:

npm test -- fileName.jsx 
Хилал Айссани
источник
1
это должно быть ответом!
Аллан Степпс
6

Если вы работаете, npm >= 5.2.0и вы установили jest локально, как devDependenciesс, npm i -d jestвы можете запустить jest для определенного файла, выполнивnpx jest /path/to/your/spec.js

bmaggi
источник
5

Мы используем nrwl-nx с угловым . В этом случае мы можем использовать эту команду:

npm test <ng-project> -- --testFile "file-name-part"

ноты:

  • npm testзапустит тестовый скрипт, указанный в package.json: "test:client": "ng test client"
  • таким образом, остальная часть cmd будет передана тесту ng
    • <ng-project> это название проекта в angular.json
      • когда вы пропустите этот параметр, будет использоваться "defaultProject"(указанный в angular.json) (поэтому вы должны указать его, когда тест не входит в ваш проект по умолчанию)
    • Далее мы должны проверить, какой компоновщик используется:
      • в angular.jsonнавигации к "project"- "<ng-project>"- "architect"-"test"
      • и проверьте "builder", что в нашем случае:"@nrwl/jest:jest"
    • теперь, когда мы знаем конструктор, нам нужно найти доступные параметры строки cmd
      • в командной строке запустите, npm test server -- --helpчтобы увидеть все доступные опции
      • или проверьте онлайн документы
    • один из вариантов, --testFileкоторый используется здесь
TmTron
источник
Это тот, который сделал это для меня, потому что мы используем nx. Спасибо.
user906573
4

Вот как я динамически запускаю тесты для конкретного файла без перезапуска теста. Мой реактивный проект был создан былcreate-react-app

поэтому он следит за изменениями, автоматически запускает тест, когда я делаю изменения.

Так вот что я вижу в конце результатов теста на терминале.

Test Suites: 16 passed, 16 total
Tests:       98 passed, 98 total
Snapshots:   0 total
Time:        5.048s
Ran all test suites.

Watch Usage: Press w to show more.

Нажмите W

Watch Usage
  Press f to run only failed tests.
  Press o to only run tests related to changed files.
  Press q to quit watch mode.
  Press p to filter by a filename regex pattern.
  Press t to filter by a test name regex pattern.
  Press Enter to trigger a test run.

затем нажмите P

Pattern Mode Usage
  Press Esc to exit pattern mode.
  Press Enter to filter by a filenames regex pattern.

 pattern 

 Start typing to filter by a filename regex pattern.

это после того, как я хотел запустить файл index.es6.js в папке «Логин»

Pattern Mode Usage
  Press Esc to exit pattern mode.
  Press Enter to filter by a filenames regex pattern.

 pattern  login/index

 Pattern matches 1 file
  src/containers/Login/index.es6.test.js

Вот как я запускаю тесты для конкретного файла.

Deko
источник
1

Я просто установил Jest как глобально, а затем побежал, jest myFileToTest.spec.jsи это сработало

URL87
источник
1

У вас есть два варианта:

  • Вариант 1: Командная строка. Вы можете запустить следующую команду
node '/Users/complete-path-to-you-project/your-project/node_modules/.bin/jest' '/Users/complete-path-to-you-project/your-project/path-to-your-file-within-the-project/your-file.spec.ts'

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

  • Вариант 2: Если вы используете VS Code, у вас есть отличный плагин для этого: Jest Runner . Это позволяет вам не только запускать тесты файл за файлом, но даже конкретные комплекты и спецификации, просто щелкнув правой кнопкой мыши на тестах, которые вы хотите запустить.
Сено
источник
0

Jest будет использовать то, что вы передаете в качестве шаблона регулярных выражений . Это будет соответствовать для.

Если вы хотите запустить определенный тестовый файл. Тогда лучший способ сделать это - указать полный путь к нему. (Вы можете слишком точно указать определенный относительный путь, например (src / XFolder / index.spec.ts)).

Самый простой способ указать полный путь в каталоге и в Linux:

jest $PWD/index.spec.ts

Обратите внимание на использование переменной $ PWD .

введите описание изображения здесь

Для окон! (быть обновленным)

Мохаммед Аллал
источник
0

С помощью Angular и Jest вы можете добавить это в package.json в разделе "scripts"

"test:debug": "node --inspect-brk ./node_modules/jest/bin/jest.js --runInBand"

Затем для запуска модульного теста для конкретного файла вы можете написать эту команду в своем терминале

npm run test:debug modules/myModule/someTest.spec.ts
Фотонный
источник