Chai.js比较数组而不考虑顺序

时间:2016-06-07 19:50:03

标签: javascript chai

我想要做的是使用chai.js比较2个基元数组,但不考虑元素的顺序 - 比如它们是2组。

现在显然我可以这样做:

const actual = ['a', 'b', 'c'];
const expected = ['b', 'c', 'a'];
expect(actual).to.have.length(expected.length);
expected.forEach(e => expect(actual).to.include(e));

但我很好奇是否有一种首选的“内置”方式(我在文档中找不到它)。

3 个答案:

答案 0 :(得分:6)

expect([4, 2]).to.have.members([2, 4])

答案 1 :(得分:1)

您可以使用chai BDD中的members assertion

var mocha = require('mocha');
var should = require('chai').should();

let a = ['a', 'b', 'c'];
let b = ['c', 'a', 'b'];
let c = ['d', 'e', 'c', 'b'];

describe('test members', function() {
    it('should pass', function() {
        a.should.have.members(b);
    });

    it('should fail', function() {
        a.should.not.have.members(c);
    });
});

答案 2 :(得分:1)

expect([4, 2]).to.have.members([2, 4])以上的答案不会检查作者提到的大小。 expect([1,2,2]).to.have.members([1,2])将通过测试。

最好的选择是使用https://www.chaijs.com/plugins/deep-equal-in-any-order/