Jest + Babel в VS Code отладчик вызывает точки останова для перемещения

Я пытаюсь отлаживать простой проект, используя babel, jest и vs code. Когда я устанавливаю точку останова, а затем начинаю отладку, мои точки останова прыгают и больше не находятся там, где они были, когда я начал. Здесь можно увидеть образец репо - https://github.com/RyanHirsch/starter-node

Я обновил свой launch.json

{
  "name": "Jest",
  "type": "node",
  "request": "launch",
  "program": "${workspaceRoot}/node_modules/jest/bin/jest.js",
  "stopOnEntry": false,
  "args": ["-i", "${file}"],
  "cwd": "${workspaceRoot}",
  "runtimeExecutable": null,
  "sourceMaps": true,
  "protocol": "inspector"
}

И мой .babelrc выглядит так:

{
  "plugins": ["@babel/plugin-proposal-object-rest-spread"],
  "sourceMaps": "inline",
  "presets": [
    [
      "@babel/preset-env",
      {
        "targets": {
          "node": "6.10"
        }
      }
    ]
  ]
}

Я думал, что вариантов исходной карты достаточно, чтобы заставить это работать, но я ошибся. Что нужно изменить, чтобы сохранить точки останова в их исходных местах? В частности, при попытке отладить мои тесты.

==== Редактировать ====

Прежде чем мои точки останова находятся на тестовой линии 10 и линии 4:

Before Debugging

Когда я начинаю отладку путем выбора моего тестового файла, а затем запускаю Jest в панели отладки VS Code, мои точки останова переходят на тестовую строку 9 и линию реализации 6: During Debugging

Работает на узле 9.6.1 со следующими расширениями:

DavidAnson.vscode-markdownlint
EditorConfig.EditorConfig
Orta.vscode-jest
PKief.material-icon-theme
PeterJausovec.vscode-docker
Shan.code-settings-sync
bungcip.better-toml
dbaeumer.vscode-eslint
dracula-theme.theme-dracula
dzannotti.vscode-babel-coloring
eamodio.gitlens
esbenp.prettier-vscode
gerane.Theme-FlatlandMonokai
humao.rest-client
mauve.terraform
mikestead.dotenv
mjmcloug.vscode-elixir
mohsen1.prettify-json
ms-vscode.Theme-MaterialKit
ms-vscode.azure-account
ms-vscode.cpptools
ritwickdey.LiveServer
sbrink.elm
shanoor.vscode-nginx
vscodevim.vim

Ответы

Ответ 1

Получил эту проблему (с использованием jest 23.6.0), проверил, что это была известная проблема в приложении create response, решен по этому запросу на извлечение:

https://github.com/facebook/create-react-app/pull/3605/files

Применили следующий конфиг к моему launch.json

{ "type": "node", "request": "launch", "name": "Jest All", "program": "${workspaceFolder}/node_modules/jest/bin/jest", "args": [ "test", "--runInBand", "--no-cache"
], "sourceMaps": false, "console": "integratedTerminal", "internalConsoleOptions": "neverOpen" },

Удалось сломать его на правильных контрольных точках.

Ответ 2

@RyanHirsch; просто используйте retainLines": true вместе с sourceMap: "inline" в вашем babelrc, и это будет работать.

Ответ 3

После долгих попыток, вот как я заставил Jest с Babel отлаживать, чтобы последовательно работать и ломать верные строки.

В основном, я использовал отличный плагин Jest для VSCode от разработчикаOrta, а также с помощью поиска "Jest" на панели расширений VSCode:

How to find and install the extension via VSCode

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

Точка останова успешно достигнута в тестовом файле:

Successful Jest test debugging via Orta's Jest VSCode plugin

Точка останова успешно достигнута в файле исходного кода:

Breakpoint successfully hit in the source code file

Ответ 4

Правильный конфиг, который работает для babel-jest 25.0.0 & amp; шутка 25.0.0 выглядит следующим образом:

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

Для получения дополнительной информации я взял свою конфигурацию из следующего хранилища.

Ответ 5

Для меня сработало отключение sourcemap путем добавления "sourceMaps": false в конфигурацию запуска. Я не до конца понимаю, почему это работает.

Пример:

{
  "type": "node",
  "request": "launch",
  "name": "Jest Current File",
  "program": "${workspaceFolder}/node_modules/.bin/jest",
  "args": [
    "${relativeFile}",
    "--config",
    "jest.config.js",
    "--no-cache"
  ],
  "console": "integratedTerminal",
  "internalConsoleOptions": "neverOpen",
  "disableOptimisticBPs": true,
  "sourceMaps": false,
  "windows": {
    "program": "${workspaceFolder}/node_modules/jest/bin/jest",
  }
}

Ответ 6

Устанавливать узел:

https://nodejs.org/en/download/

Установите Chrome Plugin:

https://chrome.google.com/webstore/detail/nodejs-v8-inspector-manag/gnhhdgbaldcilmgcpfddgdbkhjohddkj?hl=en

В вашем терминале выполните следующий скрипт

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

Более подробная информация об устранении неполадок в коде vs приведена в инструкции

https://jestjs.io/docs/en/troubleshooting

 {
  "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"
    }
  ]
}

Babel будет преобразовывать es6 в es5, поэтому его не зависит от проверки. Для проверки вам требуется расширение узла и узла chrome.

Наслаждайтесь кодированием