使用节点检查器调试远程 mocha.js 测试?

Debug remote mocha.js test with node-inspector?

我在远程机器上有一个测试文件,我想用 node-inspector 遍历它。所以,在远程机器上(Vagrantfile):

node-inspector &
mocha --debug-brk foo.test.js

然后,在我的开发机器上打开 Canary 并转到:

http://127.0.0.1:8080/debug?ws=127.0.0.1:8080&port=5858

但是,我无法调试我的测试,因为调试器将在 node_modules/mocha/bin/_mocha 的第一行中断,并且我的 测试文件在 Sources 选项卡:

我尝试在 _mocha 中设置一个断点,在 line 398:

runner = mocha.run(program.exit ? exit : exitLater);

但是当我尝试 'step into' 时,为了看到 run 函数执行,它没有介入。我可以在控制台中看到输出,所以它确实执行了。如果我设置断点directly in the run function,它不会在那里中断。

此外,test file 从未出现在 "Sources" 选项卡中,因此我无法在其中设置断点。我还尝试向其中添加一个 debugger 语句,但它仍然没有中断。

如何让 node-inspector 显示测试文件,并单步执行它?

node v0.12.0
node-inspector v0.10.0
mocha v2.2.4

我经常运行进入这个,我不知道是否有更好的解决方案(如果有我会很高兴听到),但我发现我必须让调试器前进到它意识到我要调试的其他文件的程度。如果没有看到更多您的代码,我无法就前进到哪里给出更具体的建议,但请尝试找出测试文件将加载到可用源文件中的位置并前进到那里。它会逐渐将更多文件添加到“源”面板,代码为 运行s.

实际上有2个问题:

  1. 不遵守断点
  2. 测试文件不可见

第一个问题已在最近发布的 node-inspector@v0.10.1 中得到修复。因此,断点将在任何地方得到遵守。

还有第二个问题。正如@JMM 所说,'Sources' 选项卡中的文件列表是动态的,当进程中断时,测试文件不会出现在那里。我最后做的是在测试函数 运行 之前设置一个断点,在 mocha/lib/runnable.js#266 中,在这一行:

var result = fn.call(ctx);

fn是测试函数。进入后,测试文件将出现在 Sources 选项卡中,调试器的光标将位于测试函数的第一行。