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

Posted

技术标签:

【中文标题】chai 测试数组相等性没有按预期工作【英文标题】:chai test array equality doesn't work as expected 【发布时间】:2013-07-05 19:05:13 【问题描述】:

为什么下面会失败?

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

什么是正确的测试方法?

【问题讨论】:

【参考方案1】:

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

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

对于断言,您可以使用.deepEqual、link。

【讨论】:

FTR,深度相等语法已更改为:.deepEqual() (chaijs.com/api/assert)。 它没有改变,您正在查看 Asserts 功能,而不是 Expect/Should 主题启动者关注的内容。 你说得对,我没读好。我认为这只是另一个 API 更改。 to.deep.equal(['a','b']) 似乎不起作用。但是to.have.all.members(['a','b']) 可以。好麻烦…… 当对象属性的顺序不可预测时,chaijs.com/plugins/deep-equal-in-any-order 运行良好。【参考方案2】:

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

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

请参考main documentation site。

【讨论】:

这也适用于数组:expect([1, 5, 10].sort()).to.deep.equal([1, 10, 5])【参考方案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

source

【讨论】:

【参考方案4】:

您可以使用.deepEqual()

const  assert  = require('chai');

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

【讨论】:

【参考方案5】:
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】:

你可以使用

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');

【讨论】:

【参考方案7】:

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

【讨论】:

以上是关于chai 测试数组相等性没有按预期工作的主要内容,如果未能解决你的问题,请参考以下文章

按元素比较两个 NumPy 数组的相等性

为啥字符串相等在此 Python 代码中不能按预期工作? [复制]

如何使用 xcttest 测试对象相等性?

重命名后如何检查火花列的相等性

Mongoose .lean() 方法的相等性测试失败

如何将数组列表的相等性与现代 Java 进行比较?