2011-03-20 113 views
36

node.js module list上列出了30多个测试框架...特别支持测试异步代码的node.js的单元测试框架?

哪个框架最受欢迎?他们有什么优点和缺点?

我正在寻找一个框架,它支持具有大量异步回调(可能像大多数其他节点项目)的代码的单元测试。另外,我正在寻找一些相对简单而又复杂的东西。

到目前为止,我已经研究过:

  • Nodeunit很简单,通过让你定义你希望有多少断言被调用,当测试完成支持异步代码。
  • Vowsjs看起来很有趣。使您可以很好地构建测试并具有许多高级功能。不确定这些功能是否真的有用,是否通过,或者它们是否适合您?

回答

35

expresso and vows是最受欢迎的选择。虽然有很多很好的选择。 更新:截至2011年11月,根据expresso存储库中的Readme.md,Mochaexpresso的后继者。 should.js通常与Mocha一起使用以允许BDD风格的断言。

无论您选择什么,我建议使用gently来存根核心或第三方模块。

我使用/维护testosterone,一个小测试框架,在串口上运行测试,所以你可以轻轻地滥用。虽然没有那么多人使用它。

2

QUnit就像测试框架可以获得并支持异步调用一样简单。它是JQuery的测试工具,因此您可以确定它受到高度支持并且运行良好。

您可以考虑与Sinon整合,这是一个模拟框架,它特别允许您伪造异步事件。 This tutorial和本教程的其他部分介绍了如何使用Sinon来测试异步代码。它在浏览器上,但你应该能够适应测试节点应用程序。

+3

正如你所知,Sinon也可用于nodeunit。实际上,nodeunit最初基于QUnit API,但是已经更新,使异步单元测试变得更加容易。作为一个额外的好处,nodeunit也可以在浏览器中运行测试,如果你想与客户端共享代码:) – Caolan 2011-03-21 09:07:30

9

自2012年3月,我们一直在使用Nodeunit并没有回头。它易于使用,它可以让您在模块级别和类级别的设备(setup/teardown)之间进行选择,它有一组合理的内置断言,其命令行工具非常灵活。尝试将它与nodemon相结合。

我们看了一个誓言虽然简短,但是不想定义测试一个全新的奇怪的语法。所有你需要的是断言,固定装置和一个不错的线束,而Nodeunit完全符合这个法案。

2

我还没有使用它,但是从什么举足轻重的实验室约Jasmine

+0

似乎这样会适合! – FutuToad 2014-07-22 15:58:20

+0

我最近一直在使用摩卡进行单元测试。 – 2014-07-22 23:05:49

+0

你为什么用它来对付茉莉花? – FutuToad 2014-07-23 08:51:44

0

为我自己的图书馆小插件,但更重要的是我只是想等线束开发商想在JS一个异步测试应该是什么样子:

我专门写了OKJS因为QUnit是这么没用异步的。 QUinit无法捕捉异常(!),并需要一个hacky start()来跟踪深度。

许多测试框架没有一个简单的回调包装来测试超时和捕获异常。我不确定为什么 - 回调是异步开发的核心。 =/

setTimeout(function() { 
    ok(true, "Passed and ready to resume!"); 
    start(); 
    }, 1000); 

OKJS捕获事件监听器的异常,并跟踪与INTERAL死男人的触发优秀异步请求,可以在测试不及格的。

setTimeout(unit.callback("test callback is fired"), 500); 
    setTimeout(unit.callback("callback fired, with subtests", function() { 
     unit.assert("in callback, true === true", true,true); 
    }), 500); 

很想看到这种风格支持企业解决方案。 OKJS倡导的其他功能是可以串行执行的测试块(配方样式),但是在块之间等待事件的解决。

0

test-studio是一个npm包,它为单元测试提供了一个强大的基于web的前端。它目前仅支持摩卡,并提供诸如执行单个或多组测试以及将节点检查器逐步进行单独测试等操作。

了解更多关于它here