使用Visual Studio Code的Mocha断点

And*_*len 92 tdd mocha.js node.js visual-studio-code

是否可以使用Visual Studio Code为Mocha测试添加断点?

通常在调试代码时需要配置launch.json,将program属性设置为要执行的javascript文件.我不知道如何为摩卡做这个.

Fra*_*cke 74

你知道吗,你只是进入你的启动配置,把光标放在你的其他配置之后或之间,然后按ctrl- space以获得当前有效的mocha配置自动生成?

这对我来说非常好.包括在断点处停车.(我也有一个先前的,现在过时的,不再出于各种与设置相关的原因.)

在此输入图像描述

从VSCode 1.21.1(2018年3月)开始,这会产生:

{
  "version": "0.2.0",
  "configurations": [
    {
      "name": "Mocha (Test single file)",
      "type": "node",
      "request": "launch",
      "runtimeArgs": [
        "${workspaceRoot}/node_modules/.bin/mocha",
        "--inspect-brk",
        "${relativeFile}",
      ],
      "console": "integratedTerminal",
      "internalConsoleOptions": "neverOpen",
      "port": 9229
    }
}
Run Code Online (Sandbox Code Playgroud)

旁注:debug-brk 已被删除(对于任何Node> = Version 8的人).

  • 有关 Mocha 正确配置的最新示例,请参阅:https://github.com/Microsoft/vscode-recipes/tree/master/debugging-mocha-tests (3认同)
  • 我有一些自定义代码来初始化文档和禁用热模块替换.将这个参数传递给`"args"`block:`"--require","$ {workspaceFolder} /tools/testSetup.js",` (2认同)
  • 我必须在我的(唯一的)其他配置的右大括号后面插入一个逗号,才能使“ctrl + space”起作用。 (2认同)
  • 仅供参考,接受的答案@ /sf/answers/3911846151/ 揭示了截至 2020 年 11 月必须删除的内容。 (2认同)

fel*_*ker 69

如果您不想使用--debug-brk+ Attach或声明全局mocha安装的绝对路径(如果您将launch.json保留在版本控制下并且在不同的计算机上有多个开发人员,则会生效),请安装mocha作为dev依赖项并且将此添加到您的launch.json:

{
  "name": "mocha",
  "type": "node",
  "request": "launch",
  "program": "${workspaceRoot}/node_modules/mocha/bin/_mocha",
  "stopOnEntry": false,
  "args": ["--no-timeouts", "--colors"], //you can specify paths to specific tests here
  "cwd": "${workspaceRoot}",
  "runtimeExecutable": null,
  "env": {
    "NODE_ENV": "testing"
  }
}
Run Code Online (Sandbox Code Playgroud)

只需按F5即可在测试中获得完全调试支持.

--no-timeouts确保你的测试没有超时,因为你停在断点处,并--colors确保Mocha输出颜色,即使它没有检测到VS Code支持颜色.

  • 对于其他有麻烦的人.注意_mocha而不是mocha.只有mocha,它将在VS代码中运行测试,但不会触发断点 (12认同)
  • 对于那些使用 TypeScript 的人来说,只要设置“sourceMaps: true”,这就是一个合适的答案。感谢十亿! (2认同)

Wol*_*uge 42

另一种方法是使用--debug-brkmocha 的命令行选项和AttachVisual Studio Code调试器的默认启动设置.


建议更深入的解释(来自André)

去做这个:

使用以下命令从命令行运行mocha:

mocha --debug-brk
Run Code Online (Sandbox Code Playgroud)

现在在VS Code中单击Debug图标,然后Attach从开始按钮旁边的选项中进行选择.在VS Code中添加断点,然后单击"开始".

  • 这种方式比较简单,几乎不需要任何配置 (2认同)

GPX*_*GPX 23

我在OS X 10.10上的VSCode上做了这个工作.只需./settings/launch.json用这个替换你的文件.

{
    "version": "0.1.0",
    "configurations": [
        {
            "name": "Run app.js",
            "type": "node",
            "program": "app.js", // Assuming this is your main app file.
            "stopOnEntry": false,
            "args": [],
            "cwd": ".",
            "runtimeExecutable": null,
            "env": { "NODE_ENV": "production"}
        },
        {
            "name": "Run mocha",
            "type": "node",
            "program": "/Users/myname/myfolder/node_modules/mocha/bin/_mocha",
            "stopOnEntry": false,
            "args": ["test/unit.js"],
            "cwd": ".",
            "runtimeExecutable": null,
            "env": { "NODE_ENV": "production"}
        }
    ]
}
Run Code Online (Sandbox Code Playgroud)

它也可以作为一个依据这里.

您需要更改的键值program应该设置为_mocha可执行文件,并且args应该是测试文件的数组.


mik*_*ebz 10

我在Mac OS X上使用VS Code(1.8.2)的方法是:

{
    "name": "Mocha",
    "type": "node",
    "request": "launch",
    "program": "${workspaceRoot}/node_modules/mocha/bin/_mocha",
    "stopOnEntry": false,
    "args": ["--recursive"], //you can specify paths to specific tests here
    "cwd": "${workspaceRoot}",
    "runtimeExecutable": null,
    "env": {
        "NODE_ENV": "testing"
    }
}
Run Code Online (Sandbox Code Playgroud)

Mocha需要安装在npm模块目录中.


Yas*_*Yas 8

  1. 进入Debug > Add Configuration...菜单
  2. 选择Node.js环境
  3. Mocha Tests从出现的下拉列表中选择选项
  4. 键入测试文件的路径作为args属性的最后一项
  5. 添加一个 breakpoint
  6. 点击Debug图标
  7. 选择Mocha Tests作为配置
  8. 按下Start debugging按钮
  9. :-)


Dár*_*rio 6

我已经找到了一种方法来实现这一点,我将其归类为一种解决方法.我希望Visual Studio Code团队为此提供更明确的解决方案,但与此同时我做了以下事情:

  1. 我创建了一个./settings/mocha.js运行mocha 的文件,以编程方式将参数作为要运行的文件列表.你可以在这里看到完整的文件;
  2. 我已经创建了一个启动配置,它将运行./settings/mocha.jsas program并传递我们需要测试的文件/文件模式作为参数:

    {
        "name": "Unit tests",
        "type": "node",
        "program": ".settings/mocha.js",
        "stopOnEntry": true,
        "args": ["test/unit/*.js", "test/unit/**/*.js"],
        "cwd": ".",
        "runtimeExecutable": null,
        "env": { }
    }
    
    Run Code Online (Sandbox Code Playgroud)

    完整的launch.json示例

所以这相当于做mocha test/unit/*.js test/unit/**/*.js,现在我们可以在我们的mocha测试中使用断点.