Как вы отлаживаете Jest Tests?

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

Как вы отлаживаете Jest Tests?

13 ответов

Вам не нужно Chromeдля Jest- тестов. В этом весь смысл использования Jest вместо других средств запуска тестов.

Самое простое решение, которое я нашел, - использовать VS Code. JavaScript Debug Terminal.

И он работает с рабочими пространствами Typescript и Nrvl.Nx из коробки.

  1. открыто JavaScript Debug Terminal:

  1. Запустите тесты в этом терминале в режиме просмотра npm test --watch.
  2. Установите точку останова в вашем файле.
  3. Внесите любые изменения в файл, который хотите отладить и сохранить.
  4. watch запустит Jest-тесты для измененных файлов.

Если вы хотите сузить количество файлов, запускаемых --watch Нажмите p в терминале и введите шаблон, который является лишь частью имени файла, который вы хотите протестировать, и нажмите [Enter]

Чтобы ограничить его одним тестом в файле - сфокусируйте его с помощью f, поэтому измените it(...) к fit(...)

Вы можете использовать Chrome DevTools для отладки Jest-тестов.

Сначала запустите Node-отладчик в вашем проекте:

node --inspect-brk <path to jest.js> --runInBand <path to your test file>

Примеры:

  • Если вы устанавливаете Jest локально (пример Linux):

    node --inspect-brk ./node_modules/jest/bin/jest.js --runInBand mymodule/test.js

  • Если вы устанавливаете Jest глобально (пример Windows):

    node --inspect-brk "C:\\Program Files\\nodejs\\node_modules\\jest\\bin\\jest.js" --runInBand mymodule\\test.js

Затем вы можете открыть браузер Google Chrome и ввести в адресной строке:

chrome://inspect

Теперь нажмите ссылку проверки под "Удаленная цель", чтобы открыть Chrome DevTools.

Обратите внимание, что вам, вероятно, нужно добавить папку с исходным кодом в рабочую область в chrome-devtools, чтобы иметь возможность устанавливать точки останова.

Теперь вы можете нажать F8, чтобы начать отладку.

[FYI]:

  • Версия My Node: v10.11.0
  • Моя версия Jest: 23.6.0
  • Моя версия Google Chrome: 71.0.3578.98

Я написал сообщение в блоге о 7 способах отладки тестов Jest в терминале . Вот самый быстрый способ сделать это из него.

Вы можете установить ndb , улучшенный интерфейс отладки для Node.js, поддерживаемый Chrome DevTools, с помощью

      npm install -g ndb

Тогда вы можете запустить:

      ndb npm run test

который откроет для вас DevTools и запустит тесты.

Или вы можете просто ввести одну команду:

      npx ndb npm run test

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

По состоянию на 2021 год проверьте отладку в VS Code в документации Jest. Добавить configurationsниже к вашему .vscode/launch.jsonфайл.

      {
  "version": "0.2.0",
  "configurations": [
    {
      "name": "Debug Jest Tests",
      "type": "node",
      "request": "launch",
      "runtimeArgs": [
        "--inspect-brk",
        "${workspaceRoot}/node_modules/jest/bin/jest.js",
        "--runInBand"
      ],
      "console": "integratedTerminal",
      "internalConsoleOptions": "neverOpen",
      "port": 9229
    }
  ]
}

Это мой основной конфиг для отладки Jest в VSCode, добавьте в ваши настройки запуска в settings.json

"launch" : {
  "configurations": [
    {
      "type": "node",
      "request": "launch",
      "name": "Jest",
      "program": "${workspaceRoot}/node_modules/jest/bin/jest.js",
      "args": [
          "-i"
      ],
       "skipFiles": [
        "<node_internals>/**/*.js", "node_modules",
      ]
    }
  ],
},

Вот однострочный код, который вы можете добавить в свои проекты для использования в тестовых файлах Jest:

  1. добавить этот скрипт вpackage.json:
        "test:debug": "open -a \"Google Chrome\" chrome://inspect && node --nolazy --inspect-brk ./node_modules/jest/bin/jest.js --runInBand --colors --verbose",
  1. запустите скрипт в своем проекте:
      yarn test:debug insert/path/to/file
  1. Теперь вы можете использоватьdebugger;в ваших тестовых файлах, чтобы активировать точки останова строки кода в Google Chrome!  

Скрипт состоит из двух частей. Во-первых, он открывает Chrome — чтобы:chrome://inspect— а затем он запустит процесс узла (где мы можем использовать отладчик), который запускает шуточный файл (из модулей узла) для определенного тестового файла. В результате у вас должен быть установлен Jest в зависимостях вашего проекта!

Для тех, кто ищет ответ, вы отлаживаете шутки с помощью инспектора узлов. Однако это очень медленный процесс (2-5 минут для отладки одного теста), и он не очень полезен при реальном использовании.

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

Ответ @Yuci был идеальным для меня.

Я просто уточняю это на случай, если вы используете шутку внутри локального контейнера Docker. Вам нужно точно указать --inspect-brk=0.0.0.0:9229

      node --inspect-brk=0.0.0.0:9229 <path to jest.js> --runInBand <path to your test file>

Если вы визуализируете контент с помощью внешней библиотеки, такой какreact-testing-library, вам, вероятно, понадобится визуальная обратная связь вашего теста для его отладки.

В то время как Jest использует виртуальный DOM,jest-previewдобавляет рендеринг в браузере, чтобы вы могли видеть, что делает ваш тест.

      import { render } from '@testing-library/react';
import { debug } from 'jest-preview';

describe('App', () => {
  it('should work as expected', () => {
    render(<App />);
    debug();
  });
});

И если вы используете Vitest, эквивалентная библиотека называетсяvitest-preview

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

Linux/MacOS:export TS_JEST_LOG=ts-jest.log

Окна:set TS_JEST_LOG=ts-jest.log

Бежать

node --debug-brk node_modules/.bin/jest

в каталоге вашего проекта. Это должно начать node Процесс приостановил прослушивание (обычно на порту 5858) для отладчика. Код Visual Studio является примером хорошего графического отладчика для node.js, который можно использовать для подключения к процессу прослушивающего узла.

Добавление конфигурации jest будет работать, только если есть только один проект. Однако, если в собственной папке есть несколько проектов (например, корневая папка/проект1, корневая папка/проект2), будет хорошо запустить «jest --watchAll --runInBand --coverage» с точкой останова либо в тестовом файле, либо в тестируемом файле. вариант

У меня сработало следующее:

  1. Ставим точки останова в тесте и тестируемом коде при необходимости
  2. Щелкните правой кнопкой мыши значок рядом с названием теста в тестовом файле. В открывшемся меню нажмите «Отладка теста».

3. После этого интерпретатор начнет останавливаться в тех местах, где вы установили точки останова. Всем удачи

Другие вопросы по тегам