断言库node.js?

node.js assert提供的unit testing断言非常有限。 即使在我写第一个testing之前,我已经创build了一些断言,因为很明显我会继续使用它们。

你能推荐一些好的断言库来testing常见的JavaScript情况(对象结构,对象类等)吗?

理想情况下,它应该很好地与nodeunit集成在一起(或者更好地扩展它的断言) – 我的断言不需要,我必须把它们作为一个额外的variables来test

我见过的唯一一个是柴 。 你能说什么呢?

我使用我自己的断言库, node-assertthat 。 它的特点是它的语法看起来非常stream畅,(恕我直言)非常可读(受NUnit for .NET的启发),例如:

 var actual = [...], expected = [...]; assert.that(actual, is.equalTo(expected)); 

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

它使用了一个比较库,它提供了比较对象的结构和一些其他好东西: compare.js 。

例如,如果你需要反对,而你想知道它们是否相等(按其价值),你可以这样做

 cmp.equal(foo, bar) 

或简称为:

 cmp.eq(foo, bar) 

您还可以按结构比较对象,例如检查两个对象是否实现相同的接口。 你可以这样做

 cmp.equalByStructure(foo, bar) 

或简称为:

 cmp.eqs(foo, bar); 

再次,我会让你决定是否是“好”,但至less我使用两者都很舒服。

PS:我知道StackOverflow是没有地方宣传自己的项目,但我认为在这种情况下,答案迫使我这样做,因为在这种情况下,“你能推荐”的答案是“我自己的工具” 是最合适的。 请不要认为这篇文章是垃圾邮件。

这也是一个偏好问题 – 您是否喜欢用assert语法或BDD样式断言( smth.must.equal(...) )进行testing。

对于断言的风格, 柴的主张可能会奏效。 它有更多的内置匹配器,Node自己的断言模块。

如果你发现BDD风格更具可读性和stream畅性,那么三者都是这样做的:

  • Chai.js。
  • Must.js由你真正的。
  • Should.js 。

当涉及到各种匹配器时,它们的主要区别在于其API的简单性或复杂性。 然而,他们本质上的平等主张是可以互换的 – foo.must.equal(42)foo.should.equal(42)

在selectChai.js和Should.js时,我认为有一件事需要注意,我认为这是一个基本的devise错误 – 他们在属性访问上断言的做法,而不是将匹配器作为函数调用。 我已经写了一个断言在财产访问和如何可能会导致testing误报的批评 。

柴是伟大的。 我为Node和浏览器testing尝试了不同的设置,但唯一令我满意的是Mocha + Chai + Sinon 。 但select一个断言库也是一个风格问题,我个人比较喜欢chai.expect和它的链接API,并且它有你需要的所有方法:typesvalidation,对象属性检查,exception…我也觉得它非常灵活。

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

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

您可能对Hamjest是一个基于Hamcrest的JavaScript匹配器库感兴趣。

我提供了一个框架不可知的断言和匹配器库,可以与nodeunit,mocha,jasmin等一起使用。

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

  1. 匹配器可以嵌套和组合,以创build非常有performance力的断言。
  2. 断言错误非常详细地描述了不匹配的原因(例如,哪个属性不匹配,哪个元素丢失等),而不是仅仅重复断言。

免责声明:我是Hamjest的主要作者。