261

为什么以下失败?

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

什么是正确的测试方法?

4

7 回答 7

398

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

用于.eql深入比较值。看看这个链接
或者您可以使用.deep.equal来模拟与.eql.
或者在您的情况下,您可能需要检查 .members.

对于您可以使用的断言.deepEqual,请链接

于 2013-07-08T12:53:55.777 回答
71

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

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

请参阅主要文档站点

于 2015-06-12T22:43:05.173 回答
2

对于无序的深度相等,使用成员

expect([1,2,3]).to.have.members([3,2,1]); // passes expect([1,2,3]).to.have.members([1,2,3]); // passes expect([1,2,3]).to.eql([3,2,1]); // fails

资源

于 2021-07-13T18:25:06.990 回答
0

您可以使用.deepEqual()

const { assert } = require('chai');

assert.deepEqual([0,0], [0,0]);
于 2020-11-30T20:19:36.980 回答
0
import chai from 'chai';
const arr1 = [2, 1];
const arr2 = [2, 1];
chai.expect(arr1).to.eql(arr2); // Will pass. `eql` is data compare instead of object compare.
于 2020-12-28T02:13:54.237 回答
0

您可以使用

https://www.chaijs.com/api/assert/#method_samedeepmembers

assert.sameDeepMembers(set1, set2, [message])

断言set1set2以任何顺序具有相同的成员。使用深度相等检查。

assert.sameDeepMembers([ { a: 1 }, { b: 2 }, { c: 3 } ], [{ b: 2 }, { a: 1 }, { c: 3 }], 'same deep members');
于 2021-08-22T12:43:30.690 回答
-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');
于 2017-02-23T16:07:26.813 回答