摩卡断点使用Visual Studio代码

是否有可能使用Visual Studio代码添加断点到摩卡testing?

通常在debugging代码时需要configurationlaunch.json,将程序属性设置为javascript文件来执行。 我不知道如何为摩卡做到这一点。

另一种方法是使用mocha的--debug-brk命令行选项和Visual Studio代码debugging器的默认Attach启动设置。


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

去做这个:

使用此命令从命令行运行mocha:

 mocha --debug-brk 

现在在VS Code中点击Debug图标,然后从开始button旁边的选项中selectAttach 。 在VS Code中添加断点,然后单击开始。

如果你不想使用--debug-brk +附加或者声明一个绝对path给你的全球mocha安装(如果你的launch.json保持在版本控制下,并且在不同的机器上有多个开发者),安装mocha作为开发依赖项,并将其添加到您的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即可在testing中完全支持debugging。

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

我已经在OS X 10.10上的VSCode上做了这个工作。 用这个replace你的./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"} } ] } 

它也可以作为一个要点在这里 。

您需要更改的关键值是应该设置为_mocha可执行文件的程序,以及应该是testing文件数组的args

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

摩卡需要安装在npm模块目录中。

我已经想出了一种方法来做到这一点,我把它归类为一种解决方法 。 我希望Visual Studio Code团队为此提供一个更明确的解决scheme,但同时这也是我所做的:

  1. 我创build了一个运行mocha的./settings/mocha.js文件,它以编程方式将参数作为要运行的文件列表。 你可以在这里看到完整的文件;
  2. 我创build了一个启动configuration,它将运行./settings/mocha.js作为program ,并将我们需要testing的文件/文件模式作为parameter passing:

     { "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 ,现在我们可以在我们的摩卡testing中使用断点。

你知道吗,你只是进入你的启动configuration,把你的光标之后或之间的其他configuration,并按Ctrl空间获得当前,有效的摩卡configuration自动生成?

这对我来说工作得很好。 包括停在断点处。 (我之前也有过,现在已经过时了,不再因为各种背景原因了。)

在这里输入图像说明

截至VSCode 1.17(2017年10月),这产生:

 { "type": "node", "request": "launch", "name": "my Mocha Tests", "program": "${workspaceFolder}/node_modules/mocha/bin/_mocha", "args": [ // I removed some lines here // check for yourself if you need them "${workspaceFolder}/test" ], "internalConsoleOptions": "openOnSessionStart" } 

注意: debug-brk 已被删除 (对于任何Node> =版本8以上的用户)。

对于任何使用Windows的人。 如果你已经安装了摩卡全球然后设置程序到以下path为我工作(交换您的用户名)。

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

对不起,又添加了一个答案,但是从VS Code 1.8.1以及其中包含的标准节点debugging器中,没有一个能够为我工作。 下面是我解决这个问题的方法(来自以前答案的指导以及官方的VS Code Node.jsdebugging文档),所以有一个点击/按键debugging:

  • 确保mocha安装在packages.jsondevDependency中: "devDependencies": { "mocha": "^3.2", ... }
  • 在你的package.json目录下运行npm install ,确保mocha现在安装在node_modules/
  • 打开.vscode/launch.json (或在VS Code中,按F1,开始input“launch”,然后select“Debug:Open launch.json”)
  • 点击右下方蓝色的“添加configuration”button(或者复制粘贴其他人)。 这一步是可选的…我的意思是,你可以重新使用现有的configuration。 但是我build议增加一个以减less混淆。
  • launch.json更改以下launch.json ,然后在VS Code的debugging窗口中select新的configuration名称,然后单击绿色箭头开始debugging您的节点+摩卡testing!

launch.json:的新configuration中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将工作在你把testing的地方。 适当更改。

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

对我来说,主要区别在于确保mocha在node_modules ,使用program指向可执行文件,以及需要debug-brk=x指向port中指定的port 。 上面的其他部分只是让事情变得更漂亮更容易。

如果您将.vscode/launch.json放入存储库,则取决于您和您的团队。 这是一个只有IDE的文件,但是你的整个团队可以像这样使用它,没问题,因为所有的path和安装都是相对的和明确的。

提示: package.json可以包含一个scripts标签,它也可以启动mocha,如"test": "./node_modules/.bin/mocha" ,但不会被VS代码使用 – 相反,当npm test是在命令行运行。 这个让我困惑了一下。 注意这里,以防其他人也感到困惑。

编辑:VS Code 1.9.0在debuggingconfiguration下拉列表中添加了“添加configuration”选项,您可以select“Node.js摩卡testing”,这有助于简化上述大部分内容。 您仍然需要确保mocha位于您的node_modules并且可能必须更新cwd和最后一个runtimeArgs (这是查找testing的模式)以指向适当的path。 但是,一旦你设置了这两个属性,它应该从那里工作。

这是在Windows 7的机器上工作。 我有摩卡安装在全球范围内,但这种configuration是指向项目安装,以避免需要一个用户configuration文件path(这btw,我试过用%USERPROFILE%variables没有成功)。 我现在可以在我的摩卡testing中设置断点。 好极了!

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

对于那些使用grunt或gulp的人来说,configuration非常简单。

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');}; 

在VSCode版本1.13.0(macOS)中,它们具有内置的configuration – > Mocha Tests

当使用TypeScript时,以下configuration适用于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设置为trueoutDir设置为生成

进行debugging

  1. index.tsindex.ts任何其他导入的打字稿文件中的断点
  2. 打开terminal并运行: mocha --debug-brk ./build/test/appTests.js
  3. 从VSC运行“附加”启动configuration

下面是一个来自Microsoft的启动configuration(launch.json)的示例,该工具与Mocha一起使用,并允许使用debugging器。

此外,还介绍了如何使用–debug-brk选项。

最后,这里是另一个版本的如何使用VS Code和Gulp任务执行器的tasks.json文件来debuggingMochatesting的代码。