Chai.js 不考虑顺序比较数组
Chai.js compare arrays without considering order
我想做的是使用 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));
但我很好奇是否有首选的 'built in' 方法(我在文档中找不到)。
您可以使用内置检查 'members':
expect([4, 2]).to.have.members([2, 4])
您可以使用来自 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);
});
});
以上 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/
我想做的是使用 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));
但我很好奇是否有首选的 'built in' 方法(我在文档中找不到)。
您可以使用内置检查 'members':
expect([4, 2]).to.have.members([2, 4])
您可以使用来自 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);
});
});
以上 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/