题 调试mocha测试的最小阻力路径是什么?


编辑2016年11月:Node现在有一个内置的调试器,你可以开始 --inspect。这个答案解释了它: https://stackoverflow.com/a/39901169/30946

我正在用coffeescript建立一个摩卡测试。在测试的顶部,我有:

require "../assets/js/theObject.coffee"
debugger
ss = new TheObject()

我想停在那个调试器行上,因为该对象在 theObject.coffee 没有加载。我正在使用节点检查器,它可以工作,sorta。

我的过程是:

  1. 启动节点检查器
  2. 在命令行运行测试 mocha --compilers coffee:coffee-script ./test/theObjectTests.coffee --ui bdd -d --debug-brk
  3. 转到node-inspector页面,如果它已经打开则刷新它
  4. 等待文件 theObject.coffee 要加载,然后在正确的行上放置一个断点

必须有一个更简单的方法。看起来我应该能够运行调试器并让它停在调试器行上,但我无法找到它。

我有WebStorm,它有一个调试器(本文讨论 设置它来运行mocha测试,但它没有帮助我),但是当我启动它时,它失败了。在WebStorm调试窗口中运行的命令是:

"C:\Program Files\nodejs\node.exe" --debug-brk=64232 C:\Users\jcollum\AppData\Roaming\npm\_mocha

C:\Users\jcollum\AppData\Roaming\npm\_mocha:2
basedir=`dirname "$0"`

我怀疑这可能是一个特定于Windows的问题。

环境:Windows 7,Webstorm,节点0.8.16,mocha 1.7.4,git-bash

问题是:如果你从头开始使用Mocha,那么调试器的最简单方法是什么才能轻松地停在调试器线上?这里的关键字很简单。

编辑:自从问这个我已经停止使用Windows并在Ubuntu工作。我的mocha调试过程(我不经常使用)是一样的。


39
2018-01-11 19:22


起源


有关对我有用的相关问题,请参阅我的回答: stackoverflow.com/a/29351654/3304034 - Jacob McKay


答案:


编辑,多年以后:节点6+中的最短路径是: mocha --debug-brk --inspect ./test.js 与Node Inspector Manager插件配合使用。

几周后,没有答案。这是我找到的最快捷的路径。

  1. 写摩卡测试
  2. 安装 node-inspector
  3. 开始 node-inspector  - 它现在将在5858上收听
  4. 开始摩卡测试 --debug-brk
  5. 此时,mocha测试在第一行暂停
  6. 打开Web浏览器并转到localhost:5858
  7. (可选:在测试文件的顶部添加调试器行,在该文件中停止后设置断点)
  8. 点击F10即可获得代码
  9. node-inspector将在任何已停止的行上停止 debugger 在上面。有时它不会将代码文件的窗口移动到正确的位置,因此您必须按F10使其前进到下一行并显示它在文件中的位置。

命令行:

node-inspector & mocha --compilers coffee:coffee-script/register ./test/appTests.coffee --ui bdd -d -g "should X then Y" --debug-brk


58
2018-04-08 16:52



这是我发现的最好的。如果你找到更好的方法请更新这个答案:) - captainclam
@DmitryMatveev有时摩卡不会失败,它只是坐在那里。调试对此有帮助。你根据我的问题假设我的代码很多。 - jcollum
@DmitryMatveev你正在描述一个单元测试。还有其他几种类型的测试,其中调试非常方便。 - Derek Prior
@Dmitry - 即使是小而简单的测试也可能被误解 - 调试器可以确认一个人的期望。 - Kieran Ryan
@DmitryMatveev - 所以如果我正确地阅读这个,在一个完美的世界中,没有人需要调试器,因为每个人总是TDD所有东西,并且他们“正确”地完成所有操作。我完全同意。好吧,是时候回到现实世界,我每天都要花几个小时! - max


除了@jcollum上面的回答,我发现不使用--debug-brk标志,最好只使用带-w(watch)的--debug标志

这样,当您从代码中添加和删除调试器行时,mocha将自动重新加载测试,并且您的节点检查器将在相应的行上暂停。

这节省了不得不重新访问终端不断重启测试,然后不必要地在调试器中“继续”以通过源的第一行。


11
2018-03-19 03:53



我在使用OS X中的jcollums解决方案时遇到了麻烦。源节点和规范文件似乎没有在节点检查器中加载。这对我有用。 - John Galambos
我明白了 Error: Injection failed: no require in current frame. 同 --debug。甚至尝试过 --no-preload,但仍然必须按暂停和播放。 - jasonszhao


随着最新版本的摩卡和 节点检查这对我来说很有用:

$ node-debug ./node_modules/mocha/bin/_mocha

它将本地Mocha可执行文件作为调试进程加载,在第一行停止以设置断点。


8
2018-06-21 20:17



那太光滑了,谢谢。 - jcollum


抬起头来 http://s-a.github.io/iron-node/。这是调试Node.js相关的最有效的软件。

$ iron-node ./node_modules/mocha/bin/_mocha

enter image description here

enter image description here


6
2017-08-17 21:18



你能详细说说吗?这与节点检查员相比有什么好处? - jcollum
只是一些事情...... ironNode确实支持主题。 ironNode不使用WebSockets或类似的东西。 (没有连接丢失的消息或类似的东西)。 ironNode独立于本地节点安装,因为它有自己的。没有太快的脚本来附加调试器问题。否--debug-brk或启动调试会话所需的其他准备工作。在一个奇怪的状态行为中没有UI。没有UI不加载或不工作,刷新没有帮助行为没有调试器需要很长时间来启动行为。 :) 去尝试一下。我独家使用 - Stephan Ahlf
这对我来说比节点检查员快得多。感谢您发布此内容。 - Peter Majeed


使用WebStorm节点调试器的替代方法。

简而言之:

  1. 你需要WebStorm
  2. 在WebStorm中创建新的节点调试配置文件
  3. 将mocha二进制文件的路径设置为 Path to Node App JS File
  4. 添加断点并从WebStorm启动会话

详细说明 有关Glenn Block的截图。


5
2017-10-07 08:07



我第一次拿到Webstorm的时候试过这个。无法让它工作,放弃了。很久以前我发现了博客文章。 - jcollum
奇怪,猜运气不好。最近我的工作就像一个魅力,我真的很喜欢它的设置是多么容易。考虑再试一次:) - Brock
按照博客文章中的步骤对我来说非常有用。 - Joseph Snow
博客文章过时了。我在观看此示例设置时获得了更多成功: youtube.com/watch?v=4mKiGkokyx8&feature=youtu.be - k0pernikus


如果它是Node应用程序,那么从命令行使用集成Node调试器是明星的最快捷途径:

$ mocha $args -- debug

3
2018-03-05 20:26





在Webstorm中,您现在可以使用a进行设置 mocha 组态。对我来说,开箱即用:

Node interpreter: /usr/local/bin/node
Working directory: /Users/me/sites/mysite
Mocha Package: /Users/me/sites/mysite/node_modules/mocha

接着

All in directory
Test directory: /Users/me/sites/mysite/test

它还会显示它运行的参数,因此您可以根据需要将它们复制到另一个环境中。


1
2017-12-08 12:21





对于Webstorm或PhpStorm,您可以添加特定的mocha调试配置:

Debug configuration

你必须通过绿色添加,你可能会给它一个名字。

如果项目中已安装的mocha通过:

 npm install mocha --save

要么

 yarn add mocha

它会在你的项目中找到相应的模块。

我必须为我的单元测试提供正确的路径,然后点击标记 Include subdirectories/

由于我的项目是打字稿,我不得不添加:

yarn add ts-node

对于纯粹的js项目,它不应该是必要的。

现在您可以运行整个测试套件,然后您可以从列表中选择单个测试用例并运行它们并自行调试它们。


1
2017-08-10 16:26





现有的答案都没有提到 阻力最小的道路:当您需要调试Mocha测试时,您可以 只需添加另一个断言来检查您要调试的值

myVar.should.equal(expected);

我发现这通常都是我需要的。我刚刚删除了用于调试的额外断言。


0
2018-03-20 17:08





一种现代的方法是使用nodejs 检查员集成功能。它使用起来相当简单。我已经写过如何使用它的详细解释 这个帖子


0
2017-11-26 16:13



更新了问题。 - jcollum