针对测试异步代码的 Node.js 单元测试框架?

36

node.js模块列表中列出了30多个测试框架...

哪些框架最受欢迎? 它们各有利弊吗?

我正在寻找一个支持单元测试具有大量异步回调代码(可能像大多数其他node项目一样)。 另外,我更喜欢简单轻巧而不是复杂的东西。

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

  • Nodeunit很简单,通过让您定义预计调用多少次断言以及何时测试完成来支持异步代码。
  • Vowsjs看起来很有趣。 允许您很好地组织测试并带有许多高级功能。 不确定这些功能是否实际上有用,或者它们是否会阻碍您?
6个回答

36

ExpressoVows是最受欢迎的选择,虽然还有许多其他好的选择。 更新:根据在expresso存储库中的Readme.md,自2011年11月起,MochaExpresso的继任者。通常使用should.jsMocha一起进行BDD风格的断言。

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

我使用/维护Testosterone,这是一个运行串行测试以便您可以滥用gently的小型测试框架。不过,使用它的人不太多。


9
自2012年3月以来,我们一直在使用Nodeunit,并且没有后顾之忧。它简单易用,可以让您选择模块级和类级的夹具(安装/拆卸),它有一个合理的内置断言集,并且其命令行工具非常灵活。也可以尝试与nodemon结合使用。
我们简要地看了一下Vows,但不想为定义测试使用全新的奇怪语法。你只需要断言、夹具和一个像样的测试框架,而Nodeunit完美地满足了这些要求。

2

QUnit 是一个非常简单易用的测试框架,并支持异步调用。它是JQuery的测试工具,所以你可以确信它得到了广泛的支持并能够正常工作。

你可以考虑与Sinon 集成,它是一个模拟框架,特别适用于模拟异步事件。 这篇教程 和其中链接的其他部分展示了如何使用Sinon测试异步代码。虽然它是在浏览器中运行的,但你应该能够将其适配到测试Node.js应用程序上。


3
请注意,Sinon也适用于nodeunit。事实上,nodeunit最初基于QUnit API,但现已更新以使异步单元测试更加容易。作为额外的奖励,如果您想与客户端共享代码,nodeunit还可以在浏览器中运行测试 :) - Caolan

2
我还没有使用过,但是考虑一下来自 Pivotal Labs 的 Jasmine 怎么样?

似乎这很合适! - FutuToad
为什么你使用它而不是Jasmine? - FutuToad

0

稍微宣传一下我自己的库,但更重要的是我希望其他测试框架的开发者思考一下JS中异步测试应该是什么样子:

我专门写了OKJS,因为QUnit在处理异步时非常无用。QUnit无法捕获异常(!),并且需要一个hacky start()来跟踪深度。

许多现有的测试框架都没有简单的回调包装器来测试超时和捕获异常。我不知道为什么——回调是异步开发的核心。 = /

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

OKJS 在事件监听器中捕获异常,并使用内部死亡人员触发器跟踪未完成的异步请求,该触发器可以使测试失败。

  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 的前端。它目前仅支持 mocha,并提供执行单个或一组测试以及将 node-inspector 步进到单个测试等功能。

欲知详情,请点击 这里


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接