TypeScript Mocha 测试的 Vscode 断点

And*_*ler 6 mocha.js node.js typescript visual-studio-code ts-node

我已经开始使用 TypeScript 开发 Node/ExpreeJS 项目。\n我应该注意,我没有直接运行节点。我正在 Docker 中运行节点,但我没有看到任何原因表明这会成为问题。

\n\n

我使用 vscode 作为编辑器,并尝试为 Mocha 测试配置调试启动配置。

\n\n

我的启动配置是

\n\n
{\n    "type": "node",\n    "request": "launch",\n    "name": "SK - Mocha Tests",\n    "cwd": "${workspaceRoot}",\n    "runtimeExecutable": "make",\n    "runtimeArgs": [\n        "test-brk"\n    ],\n    "port": 9321,\n    "console": "integratedTerminal",\n    "internalConsoleOptions": "neverOpen",\n    "protocol": "inspector",\n    "sourceMaps": true,\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n

make test-brk命令只是映射到在容器内docker exec执行的命令。npm run test-brk

\n\n

我的 package.json 包含此脚本定义test-brk

\n\n

"test-brk": "mocha --require source-map-support/register --require node_modules/ts-node/register --inspect-brk=0.0.0.0:9222 --debug-brk --exit test/**/*.spec.ts"

\n\n

从 vscode运行SK - Mocha Tests调试任务会启动 Mocha 并按预期运行测试。\n检查服务器已启动,vscode 调试器成功连接,如下面的输出所示。

\n\n
$  cd /home/andrew/workspace/service-kit/sk-base-nodejs ; /usr/bin/make test-brk \n(docker exec node npm run test-brk)\n\n> sk-base-nodejs@0.0.1 test-brk /workspace\n> mocha --require source-map-support/register --require node_modules/ts-node/register --inspect-brk=0.0.0.0:9321 --debug-brk --exit test/**/*.spec.ts\n\nDebugger listening on ws://0.0.0.0:9321/d696c7a4-c4e1-4212-af85-ab1675856a7a\nFor help, see: https://nodejs.org/en/docs/inspector\nDebugger attached.\nHTTP server listening on port 8080\n\n\n  Hello World\n    \xe2\x9c\x93 should return 200 and Hello World\n\n\n  1 passing (34ms)\n\nWaiting for the debugger to disconnect...\n
Run Code Online (Sandbox Code Playgroud)\n\n

但是,断点没有被击中。\n我已在应用程序 TS 源和测试 TS 源中设置。\n当测试运行时,断点会变灰并显示

\n\n
\n

断点被忽略,因为未找到生成的代码(源映射问题?)

\n
\n\n

我知道这是源 TS 和为测试执行的 JS 之间的源映射问题。 \n如上所述,我将 ts-node 与 Mocha 一起使用,似乎存在问题,因为 ts-node 不会生成源映射文件vscode 来读取。\n这在ts-node/issues/46中进行了描述,但是该问题没有解决方案。它最终链接到vscode-chrome-debug-core/issues/533,报告称该问题已在先前版本的 vscode 中修复。

\n\n

还有vscode/issues/3144建议将 TS 测试转译为 JS,然后执行 JS.. 但这不允许调试源 TS。

\n\n

我将非常感谢任何能够为我指明正确方向的意见。

\n

Kyl*_*Mit 2

我能够让它与以下启动配置一起工作:

{
    "name": "Run Mocha",
    "type": "node",
    "request": "launch",
    "program": "${workspaceRoot}/node_modules/mocha/bin/_mocha",
    "args": [
        "--no-timeouts",
        "--require",
        "ts-node/register",
        "${workspaceRoot}/src/**/*.spec.ts"
    ],
    "cwd": "${workspaceRoot}",
    "protocol": "inspector"
}
Run Code Online (Sandbox Code Playgroud)

我还必须module按照commonjs我的设置tsconfig.json

{
  "compilerOptions": {
    "module": "commonjs",
  }
}
Run Code Online (Sandbox Code Playgroud)

这是一个示例存储库,所有文件都设置正确

调试示例

进一步阅读