【问题标题】:Debug remote mocha.js test with node-inspector?使用节点检查器调试远程 mocha.js 测试?
【发布时间】:2015-07-16 23:47:57
【问题描述】:

我在远程机器上有一个测试文件,我想用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);

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

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

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

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

【问题讨论】:

  • 那么,你如何通过http://127.0.0.1从你的开发机器访问远程机器?
  • @JMM 远程端口 5858 和 8080 转发到本地 5858 和 8080
  • 啊,好的,谢谢。您是否可以创建此问题的最小复制品,我可以从 GitHub 或其他地方克隆?
  • @JMM 我做了一个 repo 来重现这个问题:github.com/mrotaru/node-inspector-test 这是一个 Vagrant 盒子,所以你可以简单地 vagrant up 准备好一切

标签: javascript node.js mocha.js node-inspector


【解决方案1】:

我经常遇到这种情况,我不知道是否有更好的解决方案(如果有的话我会很高兴听到它),但我发现我必须让调试器前进到它变成的地步知道我要调试的其他文件。在没有看到更多代码的情况下,我无法就前进到哪里给出更具体的建议,但试着找出测试文件将在可用源文件中加载并前进到那里的位置。随着代码的运行,它会逐渐向 Sources 面板添加更多文件。

【讨论】:

  • 明天试一试;我不知道文件列表是动态的。
  • hm,我一定是做错了什么,因为我从未在 Sources 选项卡中看到测试文件;问题更新了更多细节。
【解决方案2】:

其实有2个问题:

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

第一个问题在最近发布的node-inspector@v0.10.1 中得到修复。因此,断点在任何地方都会受到尊重。

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

var result = fn.call(ctx);

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

【讨论】:

    猜你喜欢
    • 2015-06-18
    • 2014-09-28
    • 2014-10-28
    • 2014-04-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-24
    相关资源
    最近更新 更多