与Node.js一起使用的最佳测试框架是什么?[关闭]


130

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

显然,在浏览器中运行的功能将是一项很大的好处,但是我主要对Node.js感兴趣。高度异步的东西会很棒。

Answers:


70

更新:

我认为摩卡咖啡是最好的。


这些框架有什么经验?

我玩过expresso,这是一个非常酷的测试框架,也具有测试覆盖率。它是由TJ Holowaychuk创建的,他也是Express.js(基于Node.js和Connect的快速(小型)服务器端JavaScript Web开发框架)的创建者。最近,我看到他还有一个很酷的库,应该名为Express.js,可以与Expresso一起使用,以获得更好的测试体验。

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

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

但我主要对Node.js感兴趣。高度异步的东西会很棒。

来自快递的报价:

传递给每个回调的参数为beforeExit,通常用于断言已调用了回调。

您可以使用beforeExit测试异步功能。


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


感谢您的答复,我尝试了expresso,但是发现异步支持不是很直观。(无论如何对我来说)
doffm

3
我目前正在尝试誓言(vowsjs.org),这对我来说更容易理解。
doffm 2010年

vowjs也看起来像一个不错的测试框架。我喜欢expresso的测试覆盖功能。再加上我想知道你不明白什么?
艾尔弗雷德(Alfred)2010年

4
您说您现在喜欢摩卡咖啡,但是为什么呢?
乔纳森·阿科尔

去尝试一下。摩卡拥有一切:)。甚至浏览器支持,代码覆盖率。您命名,摩卡咖啡就拥有它!
阿尔弗雷德

40

我使用的VowsJS易于使用异步BDD框架(行为驱动开发)并完成工作。

从我最近的观察来看,这是许多人选择测试其NPM模块的方法,因此,我相信到目前为止,这是最适合使用的模块之一。

可以与NodeJS一起使用的一些流行测试框架还有:

您还可以在此处查看JavaScript测试框架列表

很少有其他可以帮助您编写更好代码的库:

Atlassian也有Bamboo CI Server,它可以自动进行构建和测试。它是一个针对Apache / Tomcat的软件包(它之所以如此,是因为它使用Java并且非常笨重),它也不是免费的,但是它的入门许可证价格为10美元,因此我相信它是可以负担的。它是到目前为止我发现的所有CI服务器中功能最强大的,它支持所有支持xUnit的单元测试,这意味着您可以使用Bamboo来为任何语言运行构建/测试。

带有NodeJS的CI的另一个选择是Travis,许多人将其用于开源项目,因为它表示A为开源社区提供了托管的持续集成服务。

还有一个Google小组讨论,涉及Node JS项目的持续集成


6
针对使用Vows的人们的注释:自2012
Commander

之后他们做了一些改变。最后发行时间:2015
Andre Figueiredo '18

2020年在Vows官方网站上出现了错误的网关,也许已经死了?
林肯

哇,哥们,从那时起已经有很多年了,我现在能找到的关于VowJS的都是:istavros.github.io/vowjs,但是不幸的是,我不能建议您在2020年使用它。这已经过时了,我强烈建议建议您改用 Mocha(mochajs.org),Jasmin(jasmine.github.io)和Jest(jestjs.io)。
panosru

14

根据上述提问者的评论,我尝试了誓言,它解决了异步测试中遇到的许多问题。它具有混合串行和并行测试的能力。

确保您仔细阅读了指导文档,但是一旦掌握了指导文档,它就会变得灵活,功能强大并且可以产生清晰的结果。

更新:我也鼓励人们看看应该为他们的断言。它允许非常灵活,可读性强的断言,并且与Expresso和Vows以及可能的大多数其他测试框架兼容。

(我将其作为单独的答案发布,以防万一人们没有注意到对Alfred答案的评论。)

2015年1月7日更新:我需要从Vows切换到Mocha,然后从Should切换到Chai,这是值得的。Mocha现在对使用Promise的异步测试提供了更好的支持,而Chai允许一些expect不喜欢修改对象原型的人使用一些灵活的assert选项,包括api。


1
should将一个不可枚举的属性添加shouldObject原型,这意味着您要处理的所有值/对象在测试时和生产时看起来都略有不同。尽管在大多数情况下这可能“奏效”,但原则上修改内置原型并不是一个好主意。仅在测试期间执行此操作感觉不对。所有这些都是单独完成的,因此它们可以具有不错的语法。
流量

因为V2 @flow很容易使用should不延长Object.prototype(简单地调用require('should').noConflict()和使用should.js作为替代期待。
书房bardadym

6

我已经开始将Jasmine用于我的JavaScript测试,因为它很小并且可以在浏览器和节点中运行。它还具有非常可靠的报告和匹配API,因此将来可以轻松与其他工具集成。拥有一个内置的模拟框架也很有用,因为当我在浏览器中将qunit用于TDD时,它通常是我要添加的第一件事。


2

如果您想要一个真正的BDD框架,那么可以考虑使用Yadda。它与摩卡,茉莉,nodeunit,qunit,zombie和casperjs集成在一起,以支持功能文件,例如

   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

2

我一直在使用nodeunit,它使用异步功能的能力相当简单。

有一个不错的演练,应该使您可以立即在他的博客上使用nodeunit 。

[ 注:由于博客帖子的API已经改变- setUp(callback)而且tearDown(callback)都采取了回调作为参数,你需要在你的安装/拆卸完成后调用。]


对此进行研究,并尝试在expresso中对mongoose.js函数进行一些测试之后,nodeunit优选不并行运行所有测试并允许setUp和tearDown测试看起来很有用。
天门冬
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.