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

时间:2010-11-29 22:34:37

标签: testing frameworks node.js

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

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

6 个答案:

答案 0 :(得分:66)

<强>更新

在我看来,

Mocha是最好的。


  

这些框架的经验是什么?

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

  显然,能够在中跑   浏览器将是一个很大的好处

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

  

但我主要对Node.js感兴趣。   有很多异步的东西   倾斜会很棒。

引用来自expresso:

  

传递给每个回调的参数   是beforeExit,通常使用   断言回调已经存在   调用

您可以使用beforeExit来测试异步函数。


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

答案 1 :(得分:40)

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

从我最近看到的是许多人选择测试他们的NPM模块,所以我相信到目前为止它是最好用的。

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

您还可以看到JavaScript测试框架列表here

可以帮助您编写更好的代码的lib很少:

还有Bamboo CI Server Atlassian它可以自动构建和测试。它是Apache/Tomcat 的一个包(sux因为它使用Java而且非常繁重)也不是免费的,但它有一个starter license which costs $10所以我相信它是实惠的。它是迄今为止我发现的所有CI服务器中最具特色的,它支持所有支持xUnit的单元测试,这意味着您可以使用Bamboo运行任何语言的构建/测试。

使用NodeJS的CI的另一个选项是Travis,许多人将其用于他们的开源项目,因为它说为开源社区提供托管的持续集成服务。

还有一个与Continuous Integration for Node JS Projects主题的Google小组讨论。

答案 2 :(得分:14)

根据上面的提问者的评论,我尝试了vows,它解决了我在异步测试中遇到的很多问题。它能够混合串行和并行测试非常棒。

请务必仔细阅读指导文档,但一旦掌握了它,它就会灵活,强大,并产生美观,干净的结果。

更新:我还鼓励人们查看should的断言。它允许非常灵活,非常易读的断言,并且与Expresso和Vows兼容,也可能与大多数其他测试框架兼容。

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

更新2015年1月7日:为了它的价值,我已经从Vows转为Mocha,从Should转为Chai。 Mocha现在对使用promises的异步测试提供了更好的支持,而Chai允许为那些不喜欢修改对象原型的人提供几个灵活的断言选项,包括expect api。

答案 3 :(得分:6)

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

答案 4 :(得分:2)

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

有一个很好的演练,可以让你准备好与nodeunit on his blog一起使用。

[注意:自从博客帖子 - setUp(callback)tearDown(callback)以来都将API作为参数进行了更改,您需要在设置/拆解时调用它完成了。 ]

答案 5 :(得分:2)

如果你想要一个真正的BDD框架,那么可以考虑Yadda。它集成了mocha,jasmine,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