用于 TypeScript Mocha 测试的 Vscode 断点
Posted
技术标签:
【中文标题】用于 TypeScript Mocha 测试的 Vscode 断点【英文标题】:Vscode breakpoints for TypeScript Mocha tests 【发布时间】:2020-09-03 05:11:39 【问题描述】:我已经开始在 TypeScript 中开发一个 Node/ExpreeJS 项目。 我应该注意我没有直接运行节点。我在 docker 中运行节点,但我看不出这会是一个问题的任何原因。
我正在使用 vscode 作为我的编辑器,并且我正在尝试为 Mocha 测试配置调试启动配置。
我的启动配置是
"type": "node",
"request": "launch",
"name": "SK - Mocha Tests",
"cwd": "$workspaceRoot",
"runtimeExecutable": "make",
"runtimeArgs": [
"test-brk"
],
"port": 9321,
"console": "integratedTerminal",
"internalConsoleOptions": "neverOpen",
"protocol": "inspector",
"sourceMaps": true,
make test-brk
命令只是映射到在容器内执行npm run test-brk
的docker exec
命令。
我的 package.json 包含 test-brk
的脚本定义
"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"
从 vscode 运行 SK - Mocha Tests
调试任务会启动 Mocha 并按预期运行测试。
检查服务器已启动,vscode 调试器成功连接,如下面的输出所示。
$ cd /home/andrew/workspace/service-kit/sk-base-nodejs ; /usr/bin/make test-brk
(docker exec node npm run test-brk)
> sk-base-nodejs@0.0.1 test-brk /workspace
> 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
Debugger listening on ws://0.0.0.0:9321/d696c7a4-c4e1-4212-af85-ab1675856a7a
For help, see: https://nodejs.org/en/docs/inspector
Debugger attached.
HTTP server listening on port 8080
Hello World
✓ should return 200 and Hello World
1 passing (34ms)
Waiting for the debugger to disconnect...
但是没有命中断点。 我在应用程序 TS 源和测试 TS 源中都设置了。 当测试运行时,断点变灰并显示
断点被忽略,因为找不到生成的代码(源映射问题?)
我了解这是源 TS 和为测试执行的 JS 之间的源映射问题。 如上所述,我在 Mocha 中使用 ts-node 似乎有问题,因为 ts-node 不会生成源映射文件供 vscode 读取。 这在ts-node/issues/46 中有描述,但是该问题没有解决方案。它最终链接到vscode-chrome-debug-core/issues/533,据报道它已在先前版本的 vscode 中修复。
还有vscode/issues/3144建议将TS测试转译成JS然后执行JS..但这不允许调试源TS。
我将不胜感激任何可以为我指明正确方向的意见。
【问题讨论】:
通常需要运行_mocha
而不是 mocha
才能在其他上下文中进行调试
【参考方案1】:
我能够让它与以下启动配置一起工作:
"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"
我还必须在我的tsconfig.json
中将module
设置为commonjs
:
"compilerOptions":
"module": "commonjs",
这是一个example repo,所有文件设置正确
进一步阅读
Issue with mocha test debugging from typescript Running Mocha with TypeScript【讨论】:
以上是关于用于 TypeScript Mocha 测试的 Vscode 断点的主要内容,如果未能解决你的问题,请参考以下文章
如何运行用 TypeScript 编写的 Mocha 测试?
如何使用 Visual Studio Code 中的 Mocha 调试 Typescript 编写的单元测试
使用 typescript/mocha 进行单元测试时找不到模块