node.js的单元测试框架,专门支持测试异步代码?

时间:2011-03-20 17:38:12

标签: javascript unit-testing node.js

node.js module list ...

上列出了30多个测试框架

哪些框架最受欢迎?他们的利弊是什么?

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

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

  • Nodeunit很简单,并且通过让您定义您希望调用的断言数以及测试完成时支持异步代码。
  • Vowsjs看起来很有趣。允许您很好地构建测试并具有许多高级功能。不确定这些功能是否真的有用,通过,或者它们是否阻挡你的方式?

6 个答案:

答案 0 :(得分:35)

expressovows是最受欢迎的选项。虽然有很多好的选择。 更新:根据Mocha存储库中的Readme.md,截至2011年11月,expressoexpresso的后续版本。 should.js通常与Mocha一起使用以允许BDD样式的断言。

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

我使用/维护testosterone,这是一个在串行上运行测试的小测试框架,因此您可以轻轻地滥用。虽然没有那么多人使用它。

答案 1 :(得分:9)

自2012年3月以来,我们一直在使用Nodeunit并且没有回头。它简单易用,它允许您在模块级和类级别的夹具(设置/拆卸)之间进行选择,它有一套合理的内置断言,其命令行工具非常灵活。尝试将其与nodemon结合使用。

我们简要地看了一下Vows,但是不想要一个全新的奇怪语法来定义测试。你需要的只是断言,固定装置和合适的线束,Nodeunit完全适合这个法案。

答案 2 :(得分:2)

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

您可以考虑与Sinon集成,这是一个模拟框架,特别允许您伪造异步事件。 This tutorial以及链接的教程的其他部分显示了如何使用Sinon来测试异步代码。它位于浏览器上,但您应该能够将其调整为测试节点应用程序。

答案 3 :(得分:2)

我还没有使用它,但是Pivotal Labs的Jasmine呢?

答案 4 :(得分:0)

我自己的库的小插件,但更重要的是我只是希望其他线程开发人员考虑JS中的异步测试应该是什么样的:

我特意写了OKJS,因为QUnit是如此无用的异步。 QUinit无法捕获异常(!),并且需要一个hacky start()来跟踪深度。

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

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

OKJS捕获事件侦听器中的异常,并使用interal dead-man的触发器跟踪未完成的异步请求,这可能导致测试失败。

  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提倡的一些其他功能是串行执行的测试块(配方样式),但在块之间等待事件得到解决。

答案 5 :(得分:0)

test-studio是一个npm包,它为单元测试提供了一个功能强大的基于Web的前端。它目前仅支持mocha,并提供诸如执行单个或一组测试以及将节点检查器逐步执行单个测试之类的事情。

详细了解here

相关问题