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

时间:2018-05-03 09:55:29

标签: javascript unit-testing jestjs

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

在Chai ,我可以写:

const value = [1, 2, 3];
expect(value).to.have.members([2, 1, 3]);

Jest中的等效语法是什么?

4 个答案:

答案 0 :(得分:4)

另一种方法是使用jest-community/jest-extended中的自定义匹配器.toIncludeSameMembers()

自述文件中的示例

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' }]);
});

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

附加说明,如果您使用的是Typescript,则请使用以下命令should import packages.debian.org添加到expect的方法的类型:

import 'jest-extended';

答案 1 :(得分:1)

我可能只是在排序时检查数组是否相等:

expect(value.sort()).toEqual([2, 1, 3].sort())

答案 2 :(得分:0)

arrayContaining

怎么样?
expect(value).toEqual(expect.arrayContaining([2, 1, 3]));

答案 3 :(得分:0)

也许您可以使用array.sort方法将订单与arrayContaining方法结合使用。您可能还包括长度测试以获得良好的衡量标准。

const value = [1, 2, 3];
expect(value).toHaveLength(3);
expect(value.sort()).toEqual(expect.arrayContaining(value.sort()));