为什么以下失败?
expect([0,0]).to.equal([0,0]);
什么是测试它的正确方法?
答案 0 :(得分:332)
对于期望,.equal
会比较对象而不是数据,在您的情况下,它是两个不同的数组。
使用.eql
来深入比较值。看看这个link
或者您可以使用.deep.equal
来模拟与.eql
相同的内容
或者在您的情况下,您可能需要check .members
。
对于断言,您可以使用.deepEqual
,link。
答案 1 :(得分:56)
尝试使用深度等于。它将比较嵌套数组和嵌套Json。
expect({ foo: 'bar' }).to.deep.equal({ foo: 'bar' });
答案 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