Answers:
您知道吗,您只是进入启动配置,将光标放在其他配置之后或之间,然后按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的任何人)。
Ctrl+Space
自动生成的Mocha测试配置没有debug-brk
。尽管如此,使用断点进行调试仍然可以。
debug-brk
,不再需要使用,支持或自动插入它。我的旁注仅澄清了这一点,因为其他多个答案也提到了这一点。
ctrl + space
才能正常工作。
如果您不想使用--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支持颜色也可以输出颜色。
sourceMaps: true
。谢谢十亿!
npm_config_myparam
在env块中添加类似内容。在CLI的何处,它可能看起来像npm --myparam=myvalue test
。
另一种方法是使用--debug-brk
mocha 的命令行选项和Attach
Visual Studio Code调试器的默认启动设置。
建议更深入的解释(来自André)
去做这个:
使用以下命令从命令行运行mocha:
mocha --debug-brk
现在,在VS Code中,单击“调试”图标,然后Attach
从“开始”按钮旁边的选项中进行选择。在VS Code中添加断点,然后单击“开始”。
"request": "attach"
如果不存在,则必须添加到launch.json中,否则它将抱怨您必须指定程序或其他错误。
VS Code
具体的。在正常的VS 2015中不起作用
我已经在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
应将其为测试文件的数组。
OpenDebug process has terminated unexpectedly
"runtimeExecutable"
为"C:/Program Files/nodejs/node.exe"
Node还是在任何位置安装Node?
我在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目录中。
我想出了一种解决方法,将其归类为解决方法。我希望Visual Studio Code团队为此提供更确定的解决方案,但与此同时,我已经做到了:
./settings/mocha.js
文件,该文件以编程方式通过传递参数作为要运行的文件列表来运行摩卡。您可以在此处查看完整文件;我创建了一个启动配置,它将以./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": { }
}
因此,这等效于这样做mocha test/unit/*.js test/unit/**/*.js
,现在我们可以在Mocha测试中使用断点了。
'sourceMaps': true, 'outDir': './build'
到启动配置中。
如果在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"
}
很抱歉添加了另一个答案,但是从VS Code 1.8.1和其中包含的标准Node调试器开始,以前的答案都对我没有作用。这是我解决问题的方法(在此获得以前的回答以及官方VS Code Node.js调试文档的指导),因此只需单击一下即可进行调试:
devDependency
in 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
适用于您放置测试的位置。适当更改。
只要在args
和port
属性中都进行更改以匹配,就可以随意更改端口。
对我而言,主要区别在于确保mocha已进入node_modules
,program
用于指向可执行文件,并且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
(这是查找测试的模式)以指向适当的路径。但是,一旦设置了这两个属性,它就应该从那里开始工作。
在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"
},
这在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"
}
对于那些使用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');};
使用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)前往
.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
使用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
调试
index.ts
任何其他导入的打字稿文件中mocha --debug-brk ./build/test/appTests.js
这是Microsoft 的启动配置(launch.json)的示例,可与Mocha一起使用并允许使用调试器。
另外,还介绍了如何使用--debug-brk选项。
最后,这是如何使用VS Code和Gulp任务运行程序的task.json文件通过Mocha测试调试代码的替代版本。
如果您在测试中有某种依赖性,那么附加它也很容易。
例如,我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
分别放入args
中launch.json
。
最简单的解决方案
将以下代码添加到.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"
],
}
"args"
块中传递以下论点:"--require", "${workspaceFolder}/tools/testSetup.js",