用于 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-brkdocker 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 测试?

mocha+Typescript的单元测试搭建

如何使用 Visual Studio Code 中的 Mocha 调试 Typescript 编写的单元测试

使用 typescript/mocha 进行单元测试时找不到模块

使用 Typescript 在 Mocha 测试中使用 Mockery 有技巧吗?

给 TypeScript 项目编写单元测试的一些小经验