我写了一个Typescript库。单元测试也使用Mocha框架在Typescript中编写。我想直接执行单元测试而不编译成javascript。 这适用于此命令:
./node_modules/mocha/bin/mocha ./test/*.test.ts --require ts-node/register
我尝试使用以下启动设置从Visual Studio Code调试单元测试:
{
"type": "node",
"request": "launch",
"name": "Mocha Tests",
"program": "${workspaceRoot}/node_modules/mocha/bin/_mocha",
"args": [
"--require",
"ts-node/register",
"${workspaceRoot}/test/*.test.ts"
],
"internalConsoleOptions": "openOnSessionStart"
}
这样我可以从VS Code调试Mocha本身,但不能单元测试。 Mocha为测试生成单独的进程,调试器无法自动附加到子进程。
从Visual Studio Code调试Typescript单元测试的正确方法是什么?
答案 0 :(得分:3)
如果有人发现它有用,则以下launch.json
配置代码段对我有用而没有任何解决方法:
{
"name": "mocha tests",
"type": "node",
"protocol" : "inspector",
"request": "launch",
"program": "${workspaceRoot}/node_modules/mocha/bin/_mocha",
"stopOnEntry": false,
"args": [ "--compilers", "ts:ts-node/register", "--no-timeouts", "${relativeFile}"],
"cwd": "${workspaceRoot}"
}
使用node v7.10.0
,typescript 2.4.0
和Visual Studio Code 1.13.1为我工作正常。 mocha
和typescript
都安装在node_modules
下的本地。
答案 1 :(得分:1)
tl; dr:使用Nodejs debugger command
我为我的问题找到了解决方案/解决方法,尽管我并不是100%满意。
通过将--require ts-node/register
切换到Mocha,我们基本上将ts-node/register.js
库注入我们的测试环境。这个库包装需要调用,当加载.ts文件时,它会根据需要编译typescript代码。
为了测试ts-node / register如何工作,我编写了一个没有Mocha的简单Nodejs示例。示例中有一个debug_test.js
文件和一个debug_test.ts
文件。我启动debug_test.js
并加载debug_test.ts
。
我通过Vissual Studio Code中的一个简单的“Node.js:Launch Program”配置启动示例。
当我将断点放到debug_test.ts:2
时,问题与我原来的问题相同 - 它不会中断。
但是,如果我使用Nodejs debugger命令,它会中断,我可以调试我的应用程序。
当我在debugger
命令上设置断点时,Visual Studio代码识别调用堆栈,调试控制台可用,但我没有在UI上看到局部变量。
这似乎是一个VS Code错误或改进机会,但是现在这个解决方案也适用于Mocha和我原来的启动配置。
答案 2 :(得分:0)
将此线程更新为对我们有用的配置(self注释)。
--compilers
选项已弃用ts:ts-node/register
给出错误更新的配置
{
"name": "mocha tests",
"type": "node",
"protocol": "inspector",
"request": "launch",
"program": "${workspaceRoot}/node_modules/mocha/bin/_mocha",
"stopOnEntry": false,
"args": [ "-r", "ts-node/register", "${workspaceRoot}/test/**/*.spec.ts", "--no-timeouts"],
"cwd": "${workspaceRoot}"
}
答案 3 :(得分:0)
在Mac上运行的VsCode v1.43上,我使用了以下配置。另外,我在我的package.json中使用npm test
目标来调用测试,因此您可以在此处看到作为参数以及其他自定义测试参数传递的内容。
{
"type": "node",
"request": "launch",
"name": "Mocha_TypeScript_Debugger",
"program": "${workspaceFolder}/node_modules/mocha/bin/_mocha",
"runtimeExecutable": "/usr/local/bin/node",
"args": [
"--require", "ts-node/register",
"npm",
"test",
"--timeout",
"130000",
"${workspaceFolder}/src/**/${fileBasenameNoExtension}.ts",
"yourCustomArgs",
"{\"dc\":\"dubaDc\",\"comp\":\"dummy\", \"login\":\"dubakur\", \"id\":\"adkd\"}"
],
"internalConsoleOptions": "openOnSessionStart",
"openDebug": "openOnDebugBreak",
"sourceMaps": true,
"outFiles": [
"${workspaceFolder}/lib/**/*.js"
]
}