什么是Node.js最好的testing框架?

我在https://github.com/ry/node/wiki/modules#testing查看了相当长的testing框架列表。 这些框架的经验是什么?

显然,在浏览器中运行的能力是一个很大的好处,但是我主要对Node.js感兴趣。 有一个严重asynchronous倾斜的东西会很好。

更新:

摩卡是我认为最好的。


这些框架的经验是什么?

我玩expresso这是非常酷的testing框架,也有testing覆盖。 它由TJ Holowaychuk创build,TJ Holowaychuk也是Express.js (基于Node.js和Connect构build的疯狂快速(小型)服务器端JavaScript Web开发框架)的创build者。 最近我看到他也有一个很酷的库叫做should.js ,可以和Expresso一起使用,以获得更好的testing体验。

很明显,在浏览器中运行的能力是一个很大的好处

我不相信它可以在浏览器中运行,但我也不明白为什么你要在浏览器中运行它?

但我主要感兴趣的Node.js。 有一个严重asynchronous倾斜的东西会很好。

引用来自expresso:

传递给每个callback函数的参数是beforeExit,通常用于声明callback已被调用。

你可以使用beforeExit来testingasynchronous函数。


提示:在GitHub上关注TJ Holowaychuk ,因为他创build了非常好的开源代码。

我使用VowsJS这是很容易使用asynchronousBDD框架(行为驱动开发),并完成工作。

从我最近看到的是许多人selecttesting他们的NPM模块,所以我相信到目前为止,这是最好的使用。

一些可以与NodeJS一起使用的stream行的testing框架也是这样的:

  • 摩卡
  • 茉莉花
  • Expresso (不再维护)
  • 应该
  • NodeUnit
  • JSUnit的

您也可以在这里看到JavaScripttesting框架列表

还有几个库可以帮助你编写更好的代码:

  • ReadyJS 观看你的js文件并用 JSHint testing它们
  • 具体 小型持续集成服务器
  • 耶洗别 持续testing茉莉花
  • 香港 不是那里,但有一个很好的路线图,所以我留意它

Atlassian还有Bamboo CI Server ,可以自动构build和testing。 这是Apache / Tomcat的一个包(sux,因为它使用Java,这使得它非常沉重)也不是免费的,但它有一个$ 10的起始许可证,所以我相信它是负担得起的。 它是迄今为止我发现的所有CI服务器中最具特色的function,它支持所有支持xUnit的unit testing,这意味着您可以使用Bamboo运行任何语言的构build/testing。

与NodeJS配合使用的CI的另一个select是Travis ,很多人使用它来开源项目,就像托pipe一个为开源社区提供的持续集成服务。

还有一个关于“节点JS项目的持续集成”主题的谷歌小组讨论。

根据上面的提问者的意见,我尝试了誓言 ,它解决了我与我的asynchronoustesting有很多问题。 它混合串行和并行testing的能力非常棒。

确保你仔细阅读指导文档,但一旦你掌握了它,它是灵活的,强大的,并产生好的,干净的结果。

更新:我也鼓励人们检查出他们的断言。 它允许非常灵活,可读性强的断言,并且兼容Expresso和Vows,也可能兼容大多数其他testing框架。

(我发布这个作为一个单独的答案,以防人们没有注意到阿尔弗雷德的答案的评论。)

更新1/7/2015:为了什么是值得的,我已经从誓言切换到摩卡,从应该切换到柴。 对于使用承诺的asynchronoustesting,摩卡拥有更好的支持,Chai允许为那些不喜欢修改对象原型的人提供几个灵活的断言选项,包括expect api。

我已经开始使用Jasmine来进行JavaScripttesting,因为它很小,可以在浏览器和节点中运行。 它还有一个非常可靠的报告和匹配器API,因此将来可以很容易地与其他工具集成。 有一个buildin mocking框架也很有用,因为当我在浏览器中使用qunit进行TDD的时候,我经常会添加这些东西。

如果你想要一个真正的BDD框架,那么也许考虑Yadda 。 它与摩卡,茉莉,nodeunit,qunit,僵尸和casperjs集成,以支持function文件,例如

  Scenario: provides the version of all services given service x is running and service y is running when I request the service versions then service x should be version 0.0.1 and service y should be version 0.0.2 

我一直在使用nodeunit ,它能够使用asynchronous函数是相当简单的。

有一个很好的演练,应该让你准备好在他的博客 nodeunit去。

[ 注意:由于blogpost – setUp(callback)tearDown(callback)都将callback作为参数,因此在安装/拆卸完成时需要调用API,API已经更改。 ]