【问题标题】:Breakpoints in Visual Studio Code not hit when debugging mocha tests调试 mocha 测试时未命中 Visual Studio Code 中的断点
【发布时间】: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


【解决方案1】:

在启动选项中使用"protocol": "inspector", 帮助我继续运行了一段时间,尽管这会产生恼人的副作用,即测试过程在执行完所有操作后从未停止。每次运行后我都必须终止任务。所以我虽然我会再次尝试找到问题,但我成功了。解决方法很简单:在你的启动选项中添加outfiles选项,否则vscode会在TS源文件夹中寻找地图。通过添加:

        "outFiles": [
            "${workspaceRoot}/out/**/*.js"
        ],

一切都开始运转良好。如果 vscode 会打印一条由于缺少设置而无法找到源映射的警告,那将非常有帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-05-18
    • 1970-01-01
    • 2014-05-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-17
    • 2015-07-13
    相关资源
    最近更新 更多