我得到.toEqual()检查普通对象的所有字段的相等性:
expect(
{"key1":"pink wool","key2":"diorite"}
).toEqual(
{"key2":"diorite","key1":"pink wool"}
);
Run Code Online (Sandbox Code Playgroud)
这就过去了.
但是对于数组来说也是如此:
expect(["pink wool", "diorite"]).toEqual(["diorite", "pink wool"]);
Run Code Online (Sandbox Code Playgroud)
似乎没有匹配函数在jest docs中执行此操作,即测试两个数组的相等性而不管其元素位置如何.我是否必须针对另一个阵列中的所有元素测试每个元素,反之亦然?或者还有另一种方式吗?
bip*_*obe 44
没有内置方法来比较数组而不比较顺序,但您可以.sort()在进行比较之前简单地对数组进行排序:
expect(["ping wool", "diorite"].sort()).toEqual(["diorite", "pink wool"].sort());`
Run Code Online (Sandbox Code Playgroud)
你可以查看这个小提琴中的例子.
nit*_*zel 21
如前所述,expect.arrayContaining检查actual数组是否包含expected数组作为子集。要检查等效性,可以
expected数组包含actual数组:// This is TypeScript, but remove the types and you get JavaScript
const expectArrayEquivalence = <T>(actual: T[], expected: T[]) => {
expect(actual).toEqual(expect.arrayContaining(expected));
expect(expected).toEqual(expect.arrayContaining(actual));
};
Run Code Online (Sandbox Code Playgroud)
这仍然存在的问题是,当第一个断言中的测试失败时,只会知道缺少的元素,actual而不会知道不在expected.
0xc*_*aff 18
将元素放入一组。笑话知道如何匹配这些。
expect(new Set(["pink wool", "diorite"])).toEqual(new Set(["diorite", "pink wool"]));
Run Code Online (Sandbox Code Playgroud)
jay*_*jay 16
另一种方法是使用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' }]);
});
Run Code Online (Sandbox Code Playgroud)
只为一个匹配器导入一个库可能没有意义,但他们有很多我发现有用的其他有用的匹配器。
小智 10
检查内容和长度怎么样?
expect(resultArray).toEqual(expect.arrayContaining(expectedArray));
expect(resultArray.length).toEqual(expectedArray.length);
Run Code Online (Sandbox Code Playgroud)
使用expect.arrayContaining() https://jestjs.io/docs/en/expect#expectarray containsarray
例如,
expect(["ping wool", "diorite"])
.toEqual(expect.arrayContaining(["diorite", "pink wool"]));
Run Code Online (Sandbox Code Playgroud)
您可以将使用本答案中所述的集合与检查实际结果和期望的长度结合起来。这将忽略元素位置并同时保护您免受重复元素的影响。
const materials = ['pink wool', 'diorite'];
const expectedMaterials = ['diorite', 'pink wool'];
expect(new Set(materials)).toEqual(new Set(expectedMaterials));
expect(materials.length).toBe(expectedMaterials.length);
Run Code Online (Sandbox Code Playgroud)
编辑:正如下面的评论中所建议的,这仅适用于具有唯一值的数组。
如果您想在 JEST 中比较两个数组,请使用以下模型。
官方链接:https ://jestjs.io/docs/en/expect#expectarray containsarray
const array1 = ['a', 'b', 'c'];
const array2 = ['a', 'b', 'c'];
const array3 = ['a', 'b'];
it("test two arrays, this will be true", () => {
expect(array1).toEqual(expect.arrayContaining(array2));
});
it("test two arrays, this will be false", () => {
expect(array3).toEqual(expect.arrayContaining(array1));
});
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
18744 次 |
| 最近记录: |