使用mocha的--debug-brk开关启用节点调试器的正确方法是什么?

How*_*ing 68 javascript-events mocha.js node.js

我在我的测试模块中有一些调试器语句,并希望运行mocha并设置--debug-brk并点击我的断点,以便我可以检查模块的状态.不幸的是,每当我用这个选项运行mocha时,我最后会在下一行显示一个空白光标.我可以输入文本,但似乎没有任何东西可以处理我的命令(它当然不像节点调试器):

$ mocha --debug-brk tests.js -R spec
debugger listening on port 5858
[BLANK CURSOR]
Run Code Online (Sandbox Code Playgroud)

我是如何推出摩卡咖啡的?

str*_*tek 60

使用最新版本的nodejs(> = v6.3.0)和mocha(> = 3.1.0),可以使用V8检查器集成.

V8 Inspector集成允许将Chrome DevTools附加到Node.js实例以进行调试和分析

用法

--inspect激活V8检查器集成,并--debug-brk在开头添加断点.从nodejs v7.6.0mocha v3.3.0开始,您可以使用--inspect-brk简写--inspect --debug-brk

$ mocha --debug-brk --inspect
Debugger listening on port 9229.
Warning: This is an experimental feature and could change at any time.
To start debugging, open the following URL in Chrome:
chrome-devtools://devtools/remote/serve_file/@62cd277117e6f8ec53e31b1be58290a6f7ab42ef/inspector.html?experiments=true&v8only=true&ws=localhost:9229/node
Run Code Online (Sandbox Code Playgroud)

使用npm脚本

如果你有一个使用mocha的npm测试脚本,你可以使用选项分隔符结尾将选项从npm传递到你的mocha脚本--:

$ npm test -- --inspect --debug-brk

Chrome提示

不是每次都复制粘贴网址,而是转到chrome://inspect并单击"远程目标"部分中的相应链接.

  • 2016年底最有用的答案 (6认同)

Mat*_*ley 51

我能够使用node-inspector使其工作.我像你在一个shell中显示的那样运行我的测试:

mocha --debug-brk mocha/test.js
Run Code Online (Sandbox Code Playgroud)

然后在第二个shell中运行node-inspector:

node-inspector
Run Code Online (Sandbox Code Playgroud)

在浏览器中显示node-inspector吐出的URL允许我使用Web检查器进行调试.

http://127.0.0.1:8080/debug?port=5858
Run Code Online (Sandbox Code Playgroud)

  • 我做了这个,调试器开始在mocha源代码的第一行.我找不到办法打开测试并在那里设置断点.如何方便地进入我的测试代码? (2认同)

ELL*_*BLE 50

要回答原始问题,即使我还建议你研究一下node-inspector:你可以通过mocha使用内置到节点中的CLI调试器debug,而不是--debug或者--debug-brk 标志.(注意缺少破折号.)

在您的示例中,它将是:

$ mocha debug tests.js -R spec
debugger listening on port 5858
connecting... ok
break in node_modules/mocha/bin/_mocha:7
  5  */
  6 
  7 var program = require('commander')
  8   , sprintf = require('util').format
  9   , path = require('path')
debug> [CURSOR]

再次,debug如上面的粗体,没有破折号.(=

相关:https://github.com/visionmedia/mocha/issues/247

  • 如何使用`mocha debug`在`node_modules/mocha/bin/_mocha`中断,而不是在我放置`debugger`语句的代码中?如何在代码中删除`debugger`语句的地方获得REPL? (12认同)
  • *debugger*命令行是一个JavaScript REPL,但它不是*在与代码相同的环境中实例化的REPL.(是的,这很麻烦,我知道.)你必须记住在调试器的命令行输入`repl`来获得你自己的代码的实际交互环境! (7认同)
  • 这是有效的(我必须'c`一次到达我的断点但是NBD.)但是令人讨厌的是我坐在断点时似乎无法检查任何东西.就像我可以拥有`var foo ='bar'; 调试器;`如果我在提示符下键入`foo`,我会得到`ReferenceError:foo未定义` (4认同)

小智 10

如果安装了node-insector,则可以调试Mocha测试,而无需先实际运行node-inspector.最简单的方法是

node-debug _mocha
Run Code Online (Sandbox Code Playgroud)

那应该开始调试chrome中的节点测试(也适用于Safari)

我看到测试不起作用的一个原因有时是你试试http:// localhost:8080/debug?port = 5858http://127.0.0.1:8080/debug?port=5858


Tom*_*uis 5

使用 flag 运行 mocha --inspect-brk,然后在 chrome 页面中单击“打开专用于节点的 DevTools” chrome://inspect。在专用的 DevTools 窗口中添加连接localhost:9229以自动连接。

还要debugger向要调试的文件添加一条语句。

(这是使用截至 2017 年 10 月最新版本的 Node 和 Chrome)