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

Bal*_*des 6 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));
Run Code Online (Sandbox Code Playgroud)

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

Вяч*_*кий 11

上面的答案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/

  • 请将您的代码包装在代码块中(反引号)以获得更好的可读性。 (2认同)
  • 您还可以断言长度匹配。这确保了您期望的成员恰好位于数组中。 (2认同)

Del*_*ite 10

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

  • 这并不排除多余的元素,因此从技术上讲它并不能回答这个问题。这就是为什么我在这里给出-1。 (2认同)