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

时间:2013-07-08 12:38:09

标签: node.js mocha chai

为什么以下失败?

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

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

7 个答案:

答案 0 :(得分:332)

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

使用.eql来深入比较值。看看这个link 或者您可以使用.deep.equal来模拟与.eql相同的内容 或者在您的情况下,您可能需要check .members

对于断言,您可以使用.deepEquallink

答案 1 :(得分:56)

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

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

请参阅the MeshLab official site

答案 2 :(得分:0)

这是如何使用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');

答案 3 :(得分:0)

此外,to.eql可以避免在数据完全相同时(例如这样的断言)由to.eq引起的严重相等错误:

AssertionError: expected { Object (_thing, id) } to equal { Object (_thing, id) }

答案 4 :(得分:0)

您可以使用.deepEqual()

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

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

答案 5 :(得分: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.

答案 6 :(得分:0)

对于无序深度相等,使用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

source