摩卡断点使用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,但同时这也是我所做的:
- 我创build了一个运行mocha的
./settings/mocha.js
文件,它以编程方式将参数作为要运行的文件列表。 你可以在这里看到完整的文件; -
我创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.json
的devDependency
中:"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的地方。 适当更改。
只要您在args
和port
属性中进行更改,就可以随意更改端口。
对我来说,主要区别在于确保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
设置为true
, outDir
设置为生成
进行debugging
- 在
index.ts
中index.ts
任何其他导入的打字稿文件中的断点 - 打开terminal并运行:
mocha --debug-brk ./build/test/appTests.js
- 从VSC运行“附加”启动configuration
下面是一个来自Microsoft的启动configuration(launch.json)的示例,该工具与Mocha一起使用,并允许使用debugging器。
此外,还介绍了如何使用–debug-brk选项。
最后,这里是另一个版本的如何使用VS Code和Gulp任务执行器的tasks.json文件来debuggingMochatesting的代码。