柴测试数组相等不能按预期工作


235

为什么以下失败?

expect([0,0]).to.equal([0,0]);

正确的测试方法是什么?

Answers:


360

对于Expect.equal将比较对象而不是它们的数据,在您的情况下,它是两个不同的数组。

使用.eql以深深的比较值。查看此链接
或者您可以使用.deep.equal来模拟与.eql
或者,您可能要检查一下 .members

对于声称可以使用.deepEqual链接


2
在FTR中,深层相等语法已更改为:.deepEqual()chaijs.com/api/assert)。
Ludder 2014年

7
它没有改变,您正在查看Asserts功能,但没有想到/应该与哪个主题启动程序有关。
moka,2014年

5
您说得对,我读得不好。我认为这只是另一个API更改。
路德2014年

6
to.deep.equal(['a','b'])似乎不起作用。但是to.have.all.members(['a','b'])。太麻烦了……
雅各布

当对象属性的顺序不可预测时,chaijs.com / plugins / deep-equal-in-any-any-order可以很好地工作。
asokan

60

尝试使用深度等于。它将比较嵌套数组和嵌套Json。

expect({ foo: 'bar' }).to.deep.equal({ foo: 'bar' });

请参考主要文档站点


7
这也适用于数组:expect([1, 5, 10].sort()).to.deep.equal([1, 10, 5])
alxndr

-1

这是使用chai深度测试关联数组的方法。

我遇到一个问题,试图断言两个关联数组相等。我知道这些实际上不应在javascript中使用,但我正在围绕旧代码编写单元测试,该代码返回对关联数组的引用。:-)

我通过在函数调用之前将变量定义为对象(而非数组)来实现此目的:

var myAssocArray = {};   // not []
var expectedAssocArray = {};  // not []

expectedAssocArray['myKey'] = 'something';
expectedAssocArray['differentKey'] = 'something else';

// legacy function which returns associate array reference
myFunction(myAssocArray);

assert.deepEqual(myAssocArray, expectedAssocArray,'compare two associative arrays');
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.