使用Visual Studio Code的Mocha断点


101

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

通常,在调试代码时,需要配置launch.json,将程序属性设置为要执行的javascript文件。我不确定如何为摩卡咖啡做到这一点。

Answers:


83

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

这对我来说很好用。包括在断点处停止。(我还有一个以前的,现在已经过时的,由于各种与设置有关的原因,它不再存在。)

在此处输入图片说明

从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
    }
}

旁注:debug-brk 不推荐使用(至少对于Node> = Version 8的任何人)。


2
我需要一些自定义代码来初始化文档并禁用“热模块替换”。在"args"块中传递以下论点:"--require", "${workspaceFolder}/tools/testSetup.js",
肯特·布尔

1
VS代码1.29.1:Ctrl+Space自动生成的Mocha测试配置没有debug-brk。尽管如此,使用断点进行调试仍然可以。
安东尼

@Antony是的,长期以来debug-brk,不再需要使用,支持或自动插入它。我的旁注仅澄清了这一点,因为其他多个答案也提到了这一点。
Frank Nocke

1
我必须在(仅)其他配置的右大括号后插入逗号ctrl + space才能正常工作。
GOTO

2
对于摩卡适当配置的高达最新例子中看到:github.com/Microsoft/vscode-recipes/tree/master/...
马钱

70

如果您不想使用--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"
  }
}

只需按F5键,即可在测试中提供全面的调试支持。

--no-timeouts确保您的测试不会因您在断点处停止而超时,并且--colors确保Mocha即使没有检测到VS Code支持颜色也可以输出颜色。


12
对于其他遇到麻烦的人。注意_mocha而不是mocha。仅使用Mocha,它将以VS代码运行测试,但不会遇到断点
tkarls

1
对于使用TypeScript的用户,只要设置,这是一个合适的答案sourceMaps: true。谢谢十亿!
布赖恩·雷纳

要添加与npm兼容的自定义测试参数,请npm_config_myparam在env块中添加类似内容。在CLI的何处,它可能看起来像npm --myparam=myvalue test
bvj

44

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


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

去做这个:

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

mocha --debug-brk

现在,在VS Code中,单击“调试”图标,然后Attach从“开始”按钮旁边的选项中进行选择。在VS Code中添加断点,然后单击“开始”。


1
这种方式更容易,有几乎没有配置
安德烈·弗梅伦

"request": "attach"如果不存在,则必须添加到launch.json中,否则它将抱怨您必须指定程序或其他错误。
jocull

这似乎是VS Code具体的。在正常的VS 2015中不起作用
Pavel P

非常好的建议谢谢:)
Gaurav Rawat

1
请注意,这--debug-brk时下过时,这就是为什么我建议自动创建在vscode一个新的调试配置,是的,alslo专为摩卡。
Frank Nocke

24

我已经在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"}
        }
    ]
}

在这里也可以作为要点。

您需要更改的键值为program,应将其设置为_mocha可执行文件,而args应将其为测试文件的数组。


对我不起作用(在Windows上)-但如果可行,这似乎是一个不错的解决方案:)
Wolfgang Kluge,2015年

是。抱歉 OpenDebug process has terminated unexpectedly
Wolfgang Kluge,2015年

您可以尝试设置"runtimeExecutable""C:/Program Files/nodejs/node.exe"Node还是在任何位置安装Node?
GPX

可以肯定-但是没有变化。
Wolfgang Kluge,2015年

我不使用Windows,所以我无济于事。但是,请注意这一点 -他们正在谈论此OpenDebug问题。
GPX

11

我在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"
    }
}

Mocha需要安装在npm modules目录中。


这使我久违了。我错误地使用了来自“哪个上等机”的路径,而不是使用node_modules的路径。谢谢!
PMac '16

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

6

我想出了一种解决方法,将其归类为解决方法。我希望Visual Studio Code团队为此提供更确定的解决方案,但与此同时,我已经做到了:

  1. 我创建了一个./settings/mocha.js文件,该文件以编程方式通过传递参数作为要运行的文件列表来运行摩卡。您可以在此处查看完整文件;
  2. 我创建了一个启动配置,它将以./settings/mocha.js作为运行,program并传递我们需要测试的文件/文件模式作为参数:

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

    完整的launch.json示例

因此,这等效于这样做mocha test/unit/*.js test/unit/**/*.js,现在我们可以在Mocha测试中使用断点了。


对我不起作用,找不到测试文件,路径是正确的,我也尝试使用完整路径。
Simone Gianni 2015年

1
这对我也有效vscode 0.10.6。通过.ts文件中的断点和Sourcemap,我确实将其添加'sourceMaps': true, 'outDir': './build'到启动配置中。
pyrho's

4

如果在args列表的末尾添加$ {file}变量,则可以直接从打开的文件开始调试:

        {
            "type": "node",
            "request": "launch",
            "name": "Mocha Tests",
            "program": "${workspaceFolder}/node_modules/mocha/bin/_mocha",
            "args": [
                "-u",
                "tdd",
                "--timeout",
                "999999",
                "--colors",
                "${file}"
            ],
            "internalConsoleOptions": "openOnSessionStart"
        }

2

很抱歉添加了另一个答案,但是从VS Code 1.8.1和其中包含的标准Node调试器开始,以前的答案都对我没有作用。这是我解决问题的方法(在此获得以前的回答以及官方VS Code Node.js调试文档的指导),因此只需单击一下即可进行调试:

  • 确保将mocha安装为devDependencyin packages.json"devDependencies": { "mocha": "^3.2", ... }
  • npm install在您的目录中运行,package.json以确保现在已将Mocha安装在node_modules/
  • 打开.vscode/launch.json(或在VS Code中,按F1键,开始键入“ launch”,然后选择“ Debug:Open launch.json”)
  • 单击右下角的蓝色“添加配置”按钮(或仅复制并粘贴其他一个);此步骤是可选的...我的意思是,您可以重新使用现有的配置。但是我建议添加一个以减少混乱。
  • 在中更改以下内容launch.json,然后在VS Code的调试窗口中选择新的配置名称,然后单击绿色箭头开始调试节点+摩卡测试!

在新的配置中 launch.json:

"configurations": [{
    "name": "whatever name you want to show in the VS Code debug list",
    "type": "node",
    "cwd": "${workspaceRoot}",
    "program": "${workspaceRoot}/node_modules/mocha/bin/mocha",
    "args": ["--debug-brk=5858", "--no-timeouts", "--colors", "test/**/*.js"],
    "address": "localhost",
    "port": 5858,
    // the other default properties that are created for you are fine as-is
}, ...]

假设该模式test/**/*.js适用于您放置测试的位置。适当更改。

只要在argsport属性中都进行更改以匹配,就可以随意更改端口。

对我而言,主要区别在于确保mocha已进入node_modulesprogram用于指向可执行文件,并且args需要debug-brk=x指向中指定的端口port。上面的其余内容只会使事情变得更漂亮,更轻松。

是否放入.vscode/launch.json存储库取决于您和您的团队。它是仅用于IDE的文件,但是您的整个团队都可以像这样使用它,没问题,因为所有路径和安装都是相对且明确的。

提示:package.json可以包含scripts标记,该标记也可以使用来启动Mocha "test": "./node_modules/.bin/mocha",但VS Code不会使用它,而是npm test在命令行运行时使用。这使我有些困惑。注意这里,以防其他人也感到困惑。

编辑:VS Code 1.9.0在调试配置下拉列表中添加了“添加配置”选项,您可以选择“ Node.js Mocha测试”,以帮助简化上述大部分操作。您仍然需要确保您node_modules已经拥有了mocha,并且可能必须更新the cwd和last runtimeArgs(这是查找测试的模式)以指向适当的路径。但是,一旦设置了这两个属性,它就应该从那里开始工作。


2

在launch.json中,在下面再添加1个配置

{
      "type": "node",
      "request": "launch",
      "name": "Mocha Tests",
      "program": "${workspaceRoot}/node_modules/mocha/bin/_mocha",
      "args": [
        "--timeout",
        "10000",
        "${workspaceRoot}/services/*.spec.js",
        "${workspaceRoot}/*.spec.js"
      ],
      "internalConsoleOptions": "openOnSessionStart"
    },

如果您需要配置节点版本,只需添加如下runtimeExecutable字段

{
      "type": "node",
      "request": "launch",
      "name": "Mocha Tests",
      "program": "${workspaceRoot}/node_modules/mocha/bin/_mocha",
      "args": [
        "--timeout",
        "10000",
        "${workspaceRoot}/services/*.spec.js",
        "${workspaceRoot}/*.spec.js"
      ],
      "internalConsoleOptions": "openOnSessionStart",
      "runtimeExecutable": "${env:HOME}/.nvm/versions/node/v8.2.1/bin/node"
    },

1

对于使用Windows的任何人。如果您已在全球范围内安装了mocha,则将程序设置为以下路径对我有用(交换用户名)。

"program": "C:\\Users\\myname\\AppData\\Roaming\\npm\\node_modules\\mocha\\bin\\_mocha"

1

这在Windows 7计算机上可以正常运行。我确实在全球范围内安装了mocha,但是此配置指向项目安装,以避免需要用户配置文件路径(顺便说一句,我尝试使用%USERPROFILE%变量没有成功)。我现在可以在我的摩卡测试中设置断点。好极了!

{
        "name": "Mocha Tests",
        "type": "node",
        "request": "launch",
        "stopOnEntry": false,
        "program": "${workspaceRoot}/node_modules/mocha/bin/_mocha",
        "cwd": "${workspaceRoot}",
        "args": ["./test/**/*.js"],
        "runtimeExecutable": null,
        "envFile": "${workspaceRoot}/.env"
    }

1

对于那些使用grunt或gulp的用户,配置非常简单。

Launch.json

{
"version": "0.2.0",
"configurations": [

    {
        "name": "Run mocha by grunt",
        "type": "node",
        "program": "${workspaceRoot}/node_modules/grunt/bin/grunt",
        "stopOnEntry": false,
        "args": ["mochaTest"],
        "cwd": "${workspaceRoot}",
        "runtimeExecutable": null
    }
]}

Gruntfile.js

module.exports = function (grunt) {

grunt.initConfig({
    mochaTest: {
        test: {
            options: {
                reporter: 'spec'
            },
            src: ['test/**/*test.js']
        }
    }
});

grunt.loadNpmTasks('grunt-mocha-test');

grunt.registerTask('default', 'mochaTest');};

1

在VSCode版本1.13.0(macOS)中,它们在配置->中内置了它Mocha Tests


在Windows中也一样。
sfratini

1

使用Babel或生成javascript文件但仍在源代码中放置断点时,必须确保启用sourceMaps和定义outFiles。这是为我工作的示例配置。

    {
        "name": "Mocha Test",
        "type": "node",
        "request": "launch",
        "program": "${workspaceRoot}/packages/api/node_modules/mocha/bin/_mocha",
        "cwd": "${workspaceRoot}/packages/api",
        "args": ["--colors", "--no-timeouts", "out/test"],
        "outFiles": ["${workspaceRoot}/packages/api/out/*"],
        "sourceMaps": true,
    },

注意-您需要进行修改outFiles以包括可能要添加断点的所有内容。在monorepo和多个从属项目中时,这可能会更加乏味。


1

1)前往

.vscode

然后

launch.json

文件

2)在launch.json中添加以下配置-

{
    "version": "0.2.0",
    "configurations": [
        {
            "type": "node",
            "request": "launch",
            "name": "Mocha Test",
            "cwd": "${workspaceRoot}",
            "runtimeExecutable": "${workspaceRoot}/*folder_path_containing_test*/node_modules/.bin/mocha",
            "windows": {
                "runtimeExecutable": "${workspaceRoot}/*folder_path_containing_test*/node_modules/.bin/mocha.cmd"
            },
            "runtimeArgs": [
                "--colors",
                "--recursive",
                "${workspaceRoot}/*folder_path_till_test*/tests"
            ],
            "internalConsoleOptions": "openOnSessionStart"
        },
        {
            "type": "node",
            "request": "launch",
            "name": "Launch Program",
            "program": "${workspaceRoot}/*folder_path_to_test*/app.js"
        }
    ]
}

3)在测试文件中设置断点,然后按 F5


0

使用TypeScript时,以下配置在Visual Studio Code 0.8.0(tsc 1.5.3)中对我有用。

tsconfig.json

{
    "compilerOptions": {
        "module": "commonjs",
        "target": "es5",
        "noImplicitAny": false,
        "removeComments": true,
        "preserveConstEnums": true,
        "sourceMap": true,
        "outDir": "build",
        "declaration": false
    },
    "files": [
        "./src/index.ts",
        "./src/test/appTests.ts"
    ]
}

这里要注意的重要事项是生成源映射,并将js的输出目录设置为 build

launch.json

    {
        "name": "Attach",
        "type": "node",
        // TCP/IP address. Default is "localhost".
        "address": "localhost",
        // Port to attach to.
        "port": 5858,
        "sourceMaps": true,
        "outDir": "build"
    }

请注意,sourceMaps将设置为true并将outDir设置为build

调试

  1. 将断点粘贴在index.ts任何其他导入的打字稿文件中
  2. 打开一个终端并运行: mocha --debug-brk ./build/test/appTests.js
  3. 在VSC中,运行“附加”启动配置


0

如果您在测试中有某种依赖性,那么附加它也很容易。

例如,我mongo-unit-helper用来将单元测试与数据库集成在一起。

package.json 脚本是: mocha --recursive --require ./test/mongo-unit-helper.js --exit"

我的launch.json样子是:

  "configurations": [
  {
  "type": "node",
  "request": "launch",
  "name": "Mocha Tests",
  "program": "${workspaceFolder}/node_modules/mocha/bin/_mocha",
  "args": [
    "-u",
    "tdd",
    "--timeout",
    "999999",
    "--colors",
    "--recursive",
    "--require",
    "${workspaceFolder}/test/mongo-unit-helper.js",
    "${workspaceFolder}/test/**/*.js",
  ],
  "internalConsoleOptions": "openOnSessionStart"
 }
]

解决方法是--require分别放入argslaunch.json


0

最简单的解决方案

将以下代码添加到.vscode文件夹内的launch.json中:

{
            "name": "Unit tests",
            "type": "node",
            "request": "launch",
            "program": "${workspaceRoot}/node_modules/mocha/bin/_mocha",
            "args": [
            ],
        }

但是,您可能还想添加一个超时参数:

 {
            "name": "Unit tests",
            "type": "node",
            "request": "launch",
            "program": "${workspaceRoot}/node_modules/mocha/bin/_mocha",
            "args": [
                "--timeout",
                "999999"
            ],
        }
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.