【发布时间】:2016-12-30 15:59:41
【问题描述】:
我正在使用 Mocha(和 Chai)对 NodeJS 模块进行单元测试,并希望在 Visual Studio 代码中对其进行调试。我在 test 子文件夹中有一个带有一些测试的 TypeScript 文件。 VScode 在 out 目录中生成 .js 和 .map 文件(通过 tsc 监视模式任务)。我的 tsconfig.json 文件包含以下设置:
{
"compilerOptions": {
"compileOnSave": true,
"module": "commonjs",
"target": "es6",
"outDir": "out",
"removeComments": true,
"noImplicitAny": true,
"sourceMap": true,
"inlineSources": true,
"isolatedModules": false,
"allowSyntheticDefaultImports": true,
"experimentalDecorators": true
},
"include": [
"src/**/*", "parser/**/*", "test/**/*"
],
"exclude": [
"node_modules",
".vscode-test"
]
}
并且 out 目录包含 3 个包含的 3 个子目录。到目前为止一切都很好。
我可以使用这个命令运行我的测试:
mocha --compilers ts:ts-node/register,tsx:ts-node/register
在 vscode 之外。然后我用--debug-brk 开关运行这段代码并将vscode 附加到它上面。这有效,但没有命中断点。 launch.json 中的配置是:
{
"name": "Attach",
"type": "node",
"request": "attach",
"port": 5858,
"address": "localhost",
"restart": false,
"sourceMaps": true,
"outDir": null,
"localRoot": "${workspaceRoot}",
"remoteRoot": null
}
理想情况下,我希望有一个运行配置,这样我就不需要手动运行 mocha。通过这些设置,我至少可以运行测试:
{
"name": "Mocha",
"type": "node",
"request": "launch",
"cwd": "${workspaceRoot}",
"preLaunchTask": "tsc",
"program": "${workspaceRoot}/node_modules/mocha/bin/_mocha",
"args": [ "--no-timeouts", "--colors", "${workspaceRoot}/out/test/**/*.js" ],
"stopOnEntry": true,
"runtimeExecutable": null,
"env": {
"NODE_ENV": "testing"
}
"sourceMaps": true
}
但仍然没有命中断点。
要使 2 个场景中的至少一个起作用,需要什么?
更新:同时我偶然发现,当您在测试代码的某处添加debugger; 命令并在停止后设置至少一个新断点时,断点开始工作 在debugger;。之后,此单个文件中的所有后续断点都按预期工作。对我来说几乎就像一个错误。
【问题讨论】:
-
我在同一条船上。在执行带有断点的行时,在测试文件或带有断点的文件中添加
debugger;不会停止执行。假设这是一个错误,谁会拥有它? -
可能不是错误,我构建了一个最小的测试用例并且它工作了:/ github.com/givanse/vscode-debug-mocha-tests 其他一些配置文件或依赖项一定是搞砸了。
-
好吧,你写了一个 JS 测试,而我使用的是 Typescript。这可能是问题的一部分。
-
我在使用 express 应用程序时遇到了同样的问题,除非使用“调试器”,否则不会到达断点。使用 --nolazy 运行我希望可以修复它但仍然存在问题的应用程序。
标签: node.js mocha.js visual-studio-code