chai 测试数组相等性未按预期工作

问题描述 投票:0回答:7

为什么以下会失败?

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

测试它的正确方法是什么?

node.js mocha.js chai
7个回答
426
投票

对于 expect

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

使用

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

对于断言,您可以使用

.deepEqual
链接


77
投票

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

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

请参阅主要文档站点


3
投票

对于无序深度相等,请使用 members

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

来源


1
投票
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.

0
投票

您可以使用

.deepEqual()

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

assert.deepEqual([0,0], [0,0]);

0
投票

你可以使用

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

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

断言

set1
set2
以任意顺序具有相同的成员。使用深度相等检查。

assert.sameDeepMembers([ { a: 1 }, { b: 2 }, { c: 3 } ], [{ b: 2 }, { a: 1 }, { c: 3 }], 'same deep members');

-1
投票

这是如何使用 chai 来深度测试关联数组。

我在尝试断言两个associative数组相等时遇到问题。我知道这些不应该真正在 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');
© www.soinside.com 2019 - 2024. All rights reserved.