如何在忽略元素顺序的 Jest 中比较两个集合?

Dan*_*olf 7 javascript unit-testing jestjs

在 Jest 中编写单元测试时,如何测试数组是否包含任何顺序的预期值?

在 Chai,我可以写:

const value = [1, 2, 3];
expect(value).to.have.members([2, 1, 3]);
Run Code Online (Sandbox Code Playgroud)

Jest 中的等效语法是什么?

jay*_*jay 7

另一种方法是使用自定义匹配.toIncludeSameMembers()玩笑社区/笑话扩展

README 中给出的示例

test('passes when arrays match in a different order', () => {
    expect([1, 2, 3]).toIncludeSameMembers([3, 1, 2]);
    expect([{ foo: 'bar' }, { baz: 'qux' }]).toIncludeSameMembers([{ baz: 'qux' }, { foo: 'bar' }]);
});
Run Code Online (Sandbox Code Playgroud)

仅为一个匹配器导入库可能没有意义,但我发现它们还有很多其他有用的匹配器。

附加说明,如果您使用的是 Typescript,则应导入添加expect到此行的方法的类型:

import 'jest-extended';
Run Code Online (Sandbox Code Playgroud)


And*_*rle 0

关于什么arrayContaining

expect(value).toEqual(expect.arrayContaining([2, 1, 3]));
Run Code Online (Sandbox Code Playgroud)

  • `arrayContaining` 与我需要的类似。然而,“arrayContaining”允许“actual”具有“expected”之外的附加值。我想确保两个数组包含*完全相同的元素*,只是顺序可能不同。 (10认同)