在Jest中编写单元测试时,如何测试数组是否包含任何顺序的预期值?
在Chai ,我可以写:
const value = [1, 2, 3];
expect(value).to.have.members([2, 1, 3]);
Jest中的等效语法是什么?
答案 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)
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()));