如何使用Visual Studio Code

时间:2017-03-25 08:10:56

标签: unit-testing typescript mocha visual-studio-code

我写了一个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单元测试的正确方法是什么?

4 个答案:

答案 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.0typescript 2.4.0和Visual Studio Code 1.13.1为我工作正常。 mochatypescript都安装在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”配置启动示例。

enter image description here

当我将断点放到debug_test.ts:2时,问题与我原来的问题相同 - 它不会中断。

enter image description here

但是,如果我使用Nodejs debugger命令,它会中断,我可以调试我的应用程序。

当我在debugger命令上设置断点时,Visual Studio代码识别调用堆栈,调试控制台可用,但我没有在UI上看到局部变量。

enter image description here

这似乎是一个VS Code错误或改进机会,但是现在这个解决方案也适用于Mocha和我原来的启动配置。

答案 2 :(得分:0)

将此线程更新为对我们有用的配置(self注释)。

  • https://stackoverflow.com/a/44999572/147530中的--compilers选项已弃用
  • ts:ts-node/register给出错误
  • 添加“ $ {relativeFile}”也会在位置6的JSON中产生错误的意外令牌/,因为“ $ {relativeFile}”解析为.vscode / launch.json。

更新的配置

{            
            "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"
            ]
}