【发布时间】:2018-10-13 14:16:19
【问题描述】:
在 Jest 中编写单元测试时,如何测试一个数组是否完全包含预期值以任何顺序?
在 Chai 中,我可以写:
const value = [1, 2, 3];
expect(value).to.have.members([2, 1, 3]);
Jest 中的等效语法是什么?
【问题讨论】:
标签: javascript unit-testing jestjs
在 Jest 中编写单元测试时,如何测试一个数组是否完全包含预期值以任何顺序?
在 Chai 中,我可以写:
const value = [1, 2, 3];
expect(value).to.have.members([2, 1, 3]);
Jest 中的等效语法是什么?
【问题讨论】:
标签: javascript unit-testing jestjs
另一种方法是使用来自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 使用此行添加到 expect 的方法的类型:
import 'jest-extended';
【讨论】:
我可能只是检查排序时数组是否相等:
expect(value.sort()).toEqual([2, 1, 3].sort())
【讨论】:
也许您可以使用array.sort 方法和arrayContaining 方法一起排列订单。您可能还包括一个长度测试以获得良好的衡量标准。
const value = [1, 2, 3];
expect(value).toHaveLength(3);
expect(value.sort()).toEqual(expect.arrayContaining(value.sort()));
【讨论】:
arrayContaining?
expect(value).toEqual(expect.arrayContaining([2, 1, 3]));
【讨论】:
arrayContaining 与我需要的类似。但是,arrayContaining 允许actual 具有不在expected 中的附加值。我想确保两个数组都包含完全相同的元素,只是顺序可能不同。