В настоящее время точки останова могут быть установлены для использования с node debug
с использованием ключевого слова debugger;
, но любые точки останова, установленные с помощью debugger;
при использовании node --inspect
, игнорируются. Это касается только тестового кода; точки останова, установленные с помощью debugger;
в Jest или других библиотеках node_module, учитываются.
Я создал тестовый репозиторий, чтобы продемонстрировать разницу: https://github.com/snapwich/jest-inspect. Оба метода можно проверить, вытащив репо и запустив следующее:
npm install
// works
node debug --debug-brk ./node_modules/.bin/jest -i
// doesn't honor "debugger;"
node --inspect --debug-brk ./node_modules/.bin/jest -i
Кроме того, после начального выполнения с node --inspect
точки останова могут быть применены к коду на вкладке «Источники». Любые точки останова, помещенные в тестовый код (например, __tests__/jest.js
в репозитории jest-inspect выше), будут игнорироваться, но точки останова, помещенные в любые другие файлы (Jest или другой код node_modules), будут работать правильно при повторном запуске набора.
node --inspect
доступен только в узле v6.3.0 +, и я работаю на OSX, используя узел v6.4.0 и npm v3.10.3
/ cc @kentcdodds
столкнуться с той же проблемой сегодня
Также в вашем примере, если я запустил npm run debug
6
7 // break won't be triggered
> 8 debugger;
9
10 expect(test).toBe(true);
test
ReferenceError: test is not defined
Я что-то делаю не так или у него нет доступа к контексту?
@maximderbin не уверен, почему вы получаете эту ReferenceError, test
следует определить несколькими строками выше: https://github.com/snapwich/jest-inspect/blob/master/__tests__/jest. js # L5
edit - только что протестировано, вам нужно ввести repl
перед вводом test
чтобы код работал в правильном контексте.
связанная проблема https://github.com/facebookincubator/create-react-app/issues/594
Это интересно. Возможно ли, что флаг --debug
узла не работает при использовании модуля vm
для создания контекста?
Есть новости по этому поводу?
Это когда-нибудь работало раньше?
Я не думаю, что vm.runInContext
поддерживает протокол отладчика.
В этой статье упоминается перенаправление портов для поддержки отладки кода виртуальной машины. Не уверен, что это актуально.
Помимо этого, возможно, можно использовать веб-сокеты в виртуальной машине (для поддержки протокола отладчика)?
Как ты думаешь, @cpojer?
возможно, можно запускать тесты без vm
context в режиме отладки?
Эта проблема - самая большая причина, по которой я не могу переключиться на Jest. Есть новости или идеи о том, как добиться прогресса?
Я думаю, нам нужно создать репро без Jest и отправить проблему в багтрекер node.js.
Эта проблема NodeJS выглядит связанной: https://github.com/nodejs/node/issues/7593.
Репродукция минимальна:
var vm = require('vm');
new vm.Script('debugger;').runInContext(vm.createContext());
debugger;
Трижды сломается с node debug index.js
но только дважды с node --inspect --debug-brk index.js
@cpojer, как вы думаете, стоит изменить содержимое http://facebook.github.io/jest/docs/troubleshooting.html#tests -are-failing-and-you-don-t-know-why, чтобы подумайте, что это еще не работает? Я с удовольствием отправлю PR для этого, если это будет полезно - что должно быть сказано в разделе? Удалите это? Скажите "скоро"?
(Кстати, я люблю Jest! Это делает тестирование React еще более крутым)
Я создал PR для обновления документации по этому поводу: https://github.com/facebook/jest/pull/1998
Похоже, что инспектор узлов больше не поддерживается и не поддерживает узел 7. *. Когда я использую
узел --debug-brk --inspect ./node_modules/react-scripts/node_modules/.bin/jest -i
С CRA и node 7.1 он, кажется, правильно загружается в инструментах разработчика, а затем зависает с «ожиданием отключения отладчика» (даже если выполнение бесплатное)
Привет, ребята, есть новости по этому поводу?
Платформа IntelliJ (IntelliJ IDEA, WebStorm) будет поддерживать Jest в следующем выпуске 2017.1 (https://youtrack.jetbrains.com/issue/WEB-14979). По умолчанию используется инспектор v8. Будет странно, если можно запустить, но не отладить.
Но это не проблема Jest - это проблема NodeJS. И есть простой обходной путь - если вы хотите отладить единственный тест, вам не нужно беспокоиться о глобальном состоянии. Итак, для этого я реализовал специальную тестовую среду:
Установить модуль jest-environment-node-debug
yarn add jest-environment-node-debug --dev
или используя npm: npm install jest-environment-node-debug --save-dev
Запуск с флагом --env jest-environment-node-debug
Отладка работает :)
(Положение строки иногда неверно в отладчике NodeJS платформы IntelliJ, если вы используете препроцессор TypeScript и Babel вместе - это не связанная проблема и будет исправлена в версии 2017.1).
Мы с @orta буквально говорили об этом. Для него это работает в vscode, поэтому нам может не понадобиться среда отладки узлов. Я думаю, что --debug-brk
и запуск Jest с -i
будут работать.
Я ценю, что вы создали среду отладки, я бы так и поступил.
@cpojer V8 Inspector намного лучше, чем старый протокол отладчика v8 - из-за этого платформа IntelliJ Platform будет использовать инспектор V8 по умолчанию для NodeJS 7+. Так что для меня очень важно отлаживать шутку с помощью инспектора v8.
Думаю, имеет смысл ограничить это:
Одна из проблем заключается в том, что вы можете получить глобальную переменную, отличную от global
которую мы передаем файлу, запускаемому в контексте Jest. Я действительно хотел бы выяснить, как команда узлов может исправить v8, это похоже на долгосрочное исправление :(
(Для заинтересованных я использую VS Code с этим запуском JSON)
{
"name": "Run Tests With Debugger (slower, use npm run watch for normal work)",
"type": "node",
"request": "launch",
"port": 5858,
"address": "localhost",
"stopOnEntry": false,
"runtimeExecutable": null,
"runtimeArgs": [
"--debug-brk",
"./node_modules/.bin/jest",
"-i"
],
"cwd": "${workspaceRoot}"
}
@orta , ты тоже можешь поделиться своим
Это все OSS - https://github.com/artsy/emission 🎉
Мое решение для запуска и отладки одного теста Jest в IntelliJ Idea.
Версия узла: v6.9.4
Затем просто запустите любой модульный тест. crtl / command + shift + F10 / F9
@benweizhu см. https://github.com/develar/ij-rc-producer
Для тех, кто ищет разъяснений, я смог использовать операторы отладчика в моем коде и тестовых файлах в Node 7.4.0, Jest 18.x и использовать пакет @develar jest-environment-node-debug
(из этого комментария ) с этим команда:
node --debug-brk --inspect ./node_modules/.bin/jest -i --env jest-environment-node-debug
@trxcllnt пробовал это, к сожалению, у меня не работает :(
Я также собирался упомянуть https://github.com/nodejs/node/issues/6283, но я вижу, что @cpojer уже участвует в этом :)
Только что вышел Node.js 7.5.0, который уже исправляет некоторые связанные проблемы (исправил это для меня)
Спасибо за работу над @trxcllnt , без инспектора исходных карт отладка на удивление болезненна с node.
@iammerrick @trodrigues @trxcllnt @snapwich Попробуйте этот модуль npm jest-environment-node-debug
Я внес некоторые изменения, которые исправили отладку узлов для меня с использованием Node v7 и Jest 18.
Также я использую его, добавляя "testEnvironment": "jest-environment-node-debug"
в мою конфигурацию Jest.
К вашему сведению, я использовал devtool для отладки
РЕДАКТИРОВАТЬ: извините, я был слишком рано, я все еще вижу некоторые проблемы (пытаюсь их исправить)
EDIT2: неважно, я пытался использовать ту же среду для локального запуска моих тестов, что не удалось, потому что ей нужна среда отладки узла
EDIT3: Спасибо @develar за разрешение на публикацию в качестве исходного модуля
Когда я использую jest-environment-node-debug, эмуляция документа jsdom, похоже, не работает. Есть ли способ это изменить?
Между этой проблемой и https://github.com/facebook/jest/issues/2801, из-за которой даже обычно безотказная отладка в стиле printf в некоторых случаях выходит непонятно, я нахожу отладку чрезвычайно сложной.
@AgentME Что вы имеете в виду под "не на
@NikhilVerma Глобальные переменные document, window и другие глобальные переменные браузера не присутствуют при использовании jest-environment-node-debug.
test('foo', () => {
document.body.textContent = '123';
});
@AgentME Я думаю, что это ожидаемое последствие, поскольку jest-environment-node-debug
основан на jest-environment-node
а не на jest-environment-jsdom
, среде по умолчанию, которая предоставляет document
и другие глобальные объекты для имитации среда браузера.
Бродят о том же, что и @AgentME.
К вашему сведению
Привет. только что увидел новую версию узла https://nodejs.org/en/blog/release/v7.6.0/
Не уверен, что этот выпуск улучшит что-либо, поскольку в нем упоминается несколько изменений
lib: build node inspect into node (Anna Henningsen) #10187
inspector: add --inspect-brk (Josh Gavant) #11149
@ bsr203 Я только что тестировал на узле v7.6.0 и точки останова, а операторы debugger;
в тестах все еще не работают
@DanielHoffmann @ bsr203 @AgentME Не могли бы вы клонировать https://github.com/NikhilVerma/jest-environment-node-debug-fixed и запустить npm run devtool
и сообщить мне, сработает ли ваша точка останова, и вы можете увидеть документ .body.textContent (потому что я могу).
Вам нужен NodeJS 7.5.0 или выше
@NikhilVerma - нет, но у document.body.textContent есть только один разрыв строки
Я не знаю, правильно ли я использую его, я установил devtool глобально, а затем установил jest-environment-node-debug-fixed из реестра npm в качестве зависимости dev в моем проекте, затем я запустил:
devtool ./node_modules/.bin/jest --colors --config=myConfig
Тесты выполняются, но точки останова не работают. В отличие от node --inspect
я даже не могу открыть тестовые файлы в отладчике
@DanielHoffmann Ты ошибся :)
git clone [email protected]:NikhilVerma/jest-environment-node-debug-fixed.git
cd jest-environment-node-debug-fixed
npm install
npm run devtool
В основном реквизиты
Спасибо за шаги @NikhilVerma. Я сам еще не пробовал это сделать, но я подумал, что упомянул, что надеюсь, что это первое место в списке вещей, над которыми должна работать команда Jest. Я полагаю, что пользователям Jest (в том числе в Facebook) очень хотелось бы получить лучший опыт отладки :) Учитывая, насколько просто все остальное с Jest, это нехарактерно сложно (и я должен сказать ... болезненно 🙀 😉).
У меня есть инструмент node --inspect-brk ./node_modules/.bin/jest --runInBand --env jest-environment-node-debug
.
Я все еще получаю ReferenceError: window is not defined
даже после использования jest-environment-node-debug-fixed
. 😢
Изменить: Однако я заставил его работать с помощью bugger https://github.com/buggerjs/bugger
@sugatmahanti У вас была возможность попробовать шаги, которые я здесь упомянул? https://github.com/facebook/jest/issues/1652#issuecomment -281985580
@NikhilVerma Спасибо, я сделал, но как только я запустил команду, она ничего не сделала. Он открывает отладчик и немедленно закрывает его без каких-либо сообщений.
Используя следующую команду:
$ node --inspect --debug-brk ./node_modules/.bin/jest --runInBand -i --env jest-environment-node-debug
Я получаю следующие ошибки:
ReferenceError: window is not defined
only one instance of babel-polyfill is allowed
также debugger
похоже, полностью игнорируется при запуске $ node --inspect --debug-brk ./node_modules/.bin/jest --runInBand
узел 7.6.0
Шутка 19.0.2
babel-jest 19.0.0
Над этим вопросом все еще работают?
Похоже, что jest должен поддерживать команды node v6 + --inspect и --inspect-brk. Надеюсь, скоро это станет шуткой, поскольку, похоже, многие люди изо всех сил пытаются отладить свои модульные тесты (в том числе и я).
Это не шутка. Это ошибка в v8 / node, см. Https://github.com/nodejs/node/issues/7593 - пожалуйста, выразите там свои опасения и попросите команды node или v8 исправить это в vm / contextxtify.
Я собираюсь закрыть этот вопрос, потому что он не требует действий с нашей стороны. Выше были описаны некоторые обходные пути, которые могут или не сработать для вас. Как только это будет исправлено в node / v8, в конечном итоге оно автоматически начнет работать.
Установив jest-environment-node-debug
, я смог создать рабочую конфигурацию launch.json
для vscode, используя протокол инспектора с узлом 8.
Если кому-то интересно, это минимальная необходимая конфигурация (при условии, что порт и адрес стандартные):
{
"name": "Debug Jest",
"type": "node",
"request": "launch",
"runtimeArgs": [
"--inspect-brk",
"./node_modules/.bin/jest",
"-i",
"--env",
"jest-environment-node-debug"
],
"cwd": "${workspaceRoot}",
"protocol": "inspector",
"console": "integratedTerminal"
}
на окнах
{
"name": "Debug Jest",
"type": "node",
"request": "launch",
"runtimeArgs": [
"--inspect-brk",
"./node_modules/jest/bin/jest.js",
"-i",
"--env",
"jest-environment-node-debug"
],
"cwd": "${workspaceRoot}",
"protocol": "inspector",
"console": "integratedTerminal",
"sourceMaps": true
}
К вашему сведению, эта проблема должна быть решена в Node 8.4.0 (https://github.com/nodejs/node/pull/14465).
Это замечательно. В заключение! :)
Спасибо всем, у кого это получилось 👏
Итак, есть ли что-то конкретное, что нужно сделать, помимо установки последней версии node v8.4.0? Может ли кто-нибудь опубликовать для этого свой vscode launch.json ?
Эта конфигурация запуска vscode работает для меня :)
{
"name": "Debug Jest tests",
"type": "node",
"request": "launch",
"runtimeArgs": [
"--inspect",
"./node_modules/.bin/jest",
"-i"
],
"cwd": "${workspaceRoot}",
"protocol": "inspector",
"console": "integratedTerminal"
}
Вам просто нужно запустить его «по-новому». То есть с inspect
, --inspect
или --inspect-brk
. См. Https://nodejs.org/en/docs/inspector/ для получения дополнительной информации о различных способах его запуска и возможностях подключения к нему.
Вышеупомянутые jest-environment-node-debug
не нужны.
node --inspect --inspect-brk node_modules/bin/jest
должен работать с узлом 8.4.0 из коробки. Я так счастлив, что это наконец-то сработало, это была одна из основных проблем, из-за которой было трудно отлаживать тесты JavaScript.
Для тех, кто использует create-react-app
/ react-scripts
:
./node_modules/.bin/react-scripts --inspect-brk test --env=jsdom --runInBand
Убедитесь, что вы на react-scripts@^1.011
!
Точки останова не подходят для меня.
См. Пример проекта здесь:
https://github.com/sparebytes/jest-debug-example
Это конфигурация запуска:
{
"name": "Debug Jest tests",
"type": "node",
"request": "launch",
"sourceMaps": true,
"runtimeArgs": [
"--inspect-brk",
"--nolazy",
"./node_modules/jest/bin/jest.js",
"-i"
],
"cwd": "${workspaceRoot}",
"protocol": "inspector",
"console": "integratedTerminal"
}
@sparebytes в консоли, проверьте свой узел --version, убедитесь, что это 8.4. Следующая конфигурация запуска сработала для меня с теми же характеристиками:
{
"name": "Debug Jest tests",
"type": "node",
"request": "launch",
"program": "${workspaceRoot}\\node_modules\\jest\\bin\\jest.js",
"args": [
"--runInBand",
"--no-cache"
],
"runtimeArgs": [
"--inspect-brk"
],
"cwd": "${workspaceRoot}",
"protocol": "inspector",
"console": "integratedTerminal"
}
У меня все еще не работает на 8.4.0, и я все перепробовал.
Похоже, что точки останова становятся красными (активируются) после завершения тестов. Есть идеи?
+1
У меня тоже не работает
@yevhenchmykhunep Вы
./node_modules/.bin/react-scripts --inspect-brk test --env=jsdom --runInBand
Автор @Timer
У меня проблема на узле v10.5.0 и [email protected] node --inspect --inspect-brk ./node_modules/jest/bin/jest.js
Разрыв в первой строке работает, но вызовы debugger
не прекращаются :(
Похоже, это не проблема шутки, а проблема nodejs. У меня такая же проблема с отладкой моего приложения. Я использую узел v8.11.3
Я могу заставить отладчик порождаться и нажимать строки отладчика в узле 8.
"test:debug": "node --inspect-brk node_modules/.bin/jest --runInBand -t",
и
nvm exec 8 yarn test:debug
Однако эта строка отладчика не вызовет остановки:
describe.skip('With Enzyme', () => {
it('ArticleSidebar component displays', () => {
debugger;
Эта строка будет:
// this code is in not in tests
import { config } from './nextConfig';
let log, logError;
debugger;
Таким образом, для меня мораль этой истории такова: не ждите, что будут обнаружены прерывания отладчика, если они находятся в тестовом коде Jest. Почему? Может, кто-то умнее меня захочет разобраться в этом 😸
Для тех, кто все еще сталкивается с этой проблемой, отладка в Chrome DevTools работает с оператором отладчика. Не идеальное решение, но достойный обходной путь:
Для отладки в Google Chrome (или в любом браузере на основе Chromium) просто откройте свой браузер, перейдите на страницу chrome: // inspect и нажмите «Открыть выделенные инструменты разработки для узла», чтобы получить список доступных экземпляров узлов, которые вы можете подключить. к. Просто щелкните адрес, отображаемый в терминале (обычно что-то вроде localhost: 9229) после выполнения указанной выше команды, и вы сможете отлаживать Jest с помощью DevTools Chrome.
Отобразятся инструменты разработчика Chrome, и точка останова будет установлена в первой строке сценария Jest CLI (это делается просто для того, чтобы дать вам время открыть инструменты разработчика и предотвратить выполнение Jest до того, как у вас будет время для этого. ). Нажмите кнопку, которая выглядит как кнопка «воспроизведение» в верхнем правом углу экрана, чтобы продолжить выполнение. Когда Jest выполняет тест, содержащий оператор отладчика, выполнение приостанавливается, и вы можете проверить текущую область видимости и стек вызовов.
Источник: https://jestjs.io/docs/en/troubleshooting#tests -are-failing-and-you-don-t-know-why
@jchani, даже с этим методом, операторы отладки внутри тестов все равно не сломаются. Как отметил @jcollum . Даже с включенным разрывом в первой строке. Точки останова внутри тестов - это тот тип, который мы все хотим больше, чем любой другой. Отладка, почему перестал работать тест, без этой возможности - лаваш.
https://github.com/vuematerial/vue-material/pull/1840 @ Samuell1, почему вы хотите придерживаться jest 22, когда у нас 4 теста не работают на dev ... imo, при неудачных тестах никогда нельзя допускать фиксации.
Для пользователей Vue: если ваши операторы отладчика не работают ... попробуйте переместить их в свой компонент вместо кода шутки, сделайте как можно меньше шутки и просто проверьте состояние ваших фикстур ... по крайней мере, до тех пор, пока nodejs команда исправляет эту проблему.
Мои вызовы debugger
находятся в input-speed.vue
. Я понимаю, что это не идеально, но это лучше, чем отсутствие отладки или отказ от тестов, потому что их слишком сложно построить.
import Vue from 'vue'
import { mount } from 'avoriaz'
import f1 from '../fixtures/input-speed.vue'
test('should work with phones autocorrect', async () => {
const wrapper = await mount(f1, {})
const vm = wrapper.vm
await wrapper.vm.$nextTick()
// should work with android autocorrect without waiting
expect(vm.form.server).toBe('autocorrect')
expect(vm.noBind).toBe('Not data binded') // Should work without data binding
})
Добавление этого для всех, у кого возникла эта проблема при использовании параметра --watch
- операторы debugger
игнорируются с помощью --watch
, однако добавление --no-cache
устраняет проблему. Я могу подтвердить, что на узле 10.8.0
последовательно работает следующее:
node --inspect-brk node_modules/.bin/jest --runInBand --no-cache --watch
для узла 6.x вместо node --inspect-brk
попробуйте node inspect
(обратите внимание на отсутствие дефисов)
nvm
Мне помогло это расширение: https://chrome.google.com/webstore/detail/nodejs-v8-inspector-manag/gnhhdgbaldcilmgcpfddgdbkhjohddkj/related?hl=en
Он обнаруживает node --inspect и открывает devTools в Chrome для этого веб-сокета. debugger
операторы и точки останова, установленные вручную в инструментах разработки, сработали!
Забавно, похоже, мне здесь повезет больше, если я выключу Node Inspector Manager и вместо этого использую chrome://inspect
.
@jcollum Как разработчик NiM ... что-нибудь, в частности, я должен знать?
Извините, здесь нет ничего конкретного. Иногда попадание в точку останова в файле, находящемся за исходной картой, просто нестабильно. В следующий раз, когда мне нужно будет отладить тест-шутку, я дам NIM еще один шанс.
Я хотел сообщить, что мы столкнулись с той же проблемой, о которой упоминал @ brien-givens
Как он сказал, добавление --no-cache
решает проблему для нас (подробности см. Здесь: https://github.com/facebook/jest/issues/1652#issuecomment-412692363)
@ brien-givens спасибо, что поделились своим решением :-)
Для меня проблема заключалась в двух файлах * .test.js с одинаковым именем (расположенных в разных папках). Когда я удалил один из них, отладчик без проблем попал в другой.
Конфигурация:
"name": "Debug Jest Test",
"type": "node",
"request": "launch",
"program": "${workspaceRoot}/node_modules/jest/bin/jest",
"args": [
"${fileBasenameNoExtension}",
],
"console": "integratedTerminal"
Самый полезный комментарий
node --inspect --inspect-brk node_modules/bin/jest
должен работать с узлом 8.4.0 из коробки. Я так счастлив, что это наконец-то сработало, это была одна из основных проблем, из-за которой было трудно отлаживать тесты JavaScript.