Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/unit-testing/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
node.js的断言库?_Node.js_Unit Testing_Assert_Nodeunit_Chai - Fatal编程技术网

node.js的断言库?

node.js的断言库?,node.js,unit-testing,assert,nodeunit,chai,Node.js,Unit Testing,Assert,Nodeunit,Chai,node.js assert为单元测试提供的断言非常有限。甚至在编写第一个测试之前,我已经创建了一些断言,因为很明显,我将继续重复使用它们 您能推荐一些好的断言库来测试常见的javascript情况(对象结构、对象类等)吗 理想情况下,它应该与nodeunit很好地集成(或者更好地扩展它的断言)——我的断言没有,我必须将它们作为一个额外变量通过test 我只见过一个。你能说些什么呢?我使用自己的断言库。它的特色在于它的语法看起来非常流畅,(IMHO)可读性很强(灵感来源于NUnit for.NE

node.js assert为单元测试提供的断言非常有限。甚至在编写第一个测试之前,我已经创建了一些断言,因为很明显,我将继续重复使用它们

您能推荐一些好的断言库来测试常见的javascript情况(对象结构、对象类等)吗

理想情况下,它应该与nodeunit很好地集成(或者更好地扩展它的断言)——我的断言没有,我必须将它们作为一个额外变量通过
test


我只见过一个。你能说些什么呢?

我使用自己的断言库。它的特色在于它的语法看起来非常流畅,(IMHO)可读性很强(灵感来源于NUnit for.NET),例如:

基本上,它工作得很好,但是还没有实现太多的断言。所以,无论是“好”还是“坏”,我都不会决定——这取决于你

它利用了一个比较库,该库提供了一些功能,例如按结构比较对象和其他一些好功能:

例如,如果您必须创建对象,并且您想知道它们是否相等(通过它们的值),您可以这样做

cmp.equal(foo, bar)
或简称为:

cmp.eq(foo, bar)
cmp.eqs(foo, bar);
您还可以按结构比较对象,例如,检查两个对象是否实现相同的接口。你可以这样做

cmp.equalByStructure(foo, bar)
或简称为:

cmp.eq(foo, bar)
cmp.eqs(foo, bar);
再说一次,我会让你决定它是否“好”,但至少我对两者都很满意


PS:我知道StackOverflow不是为你自己的项目做广告的地方,但我认为在这种情况下,答案迫使我这样做,因为“你能推荐”的答案是“我自己的工具”,在这种情况下,对于me它是最合适的。请不要把这个帖子当成垃圾邮件。我尝试了很多不同的节点和浏览器测试设置,但唯一让我满意的是++。但是选择断言库也是一个风格问题,我个人喜欢
chai。除了它的链式API之外,它还有你需要的所有方法:类型验证、对象属性检查、,例外情况……我也发现它非常灵活。

这在某种程度上也是一个偏好的问题-您是喜欢使用
断言
语法还是BDD样式的断言进行测试(
smth.must.equal(…)

对于断言样式,可以很好地工作。它有更多的内置匹配器,这些匹配器与节点自己的断言模块相匹配

如果您发现BDD样式更具可读性和流畅性,这三种样式都可以做到:

  • 真的是你的
当涉及到各种匹配器时,它们的主要区别在于API的简单性或复杂性。不过,它们的基本相等断言是可交换的——
foo.must.equal(42)
foo.should.equal(42)


在选择Chai.js和Should.js时,有一件事需要注意,我认为这是一个基本的设计错误——他们断言属性访问而不是将匹配器作为函数调用的做法。我已经写了一篇关于它如何在测试中导致误报的文章。

您可能会感兴趣,一个基于的JavaScript匹配器库

我提供了一个框架无关的断言和匹配器库,可以与nodeunit、mocha、jasmin和其他工具一起使用

与Chai、Jasmin和类似框架相比,它有两个主要优势:

  • 匹配器可以嵌套和组合,以创建非常有表现力的断言
  • 断言错误详细描述了不匹配的原因(例如,哪个属性不匹配,哪个元素丢失,等等),而不仅仅是重复断言
  • 免责声明:我是Hamjest的主要作者。

    是一个易于使用的可扩展断言库,用于NodeJS和浏览器。我已经用过几次了,我可以说它有你需要的任何断言。你可以学习如何使用它。例如:

    var pi = Math.PI;
    expect(pi)
      .toExist()
      .toBeLessThan(4)
      .toBeGreaterThan(3);