Man*_*uky 11 javascript arrays assertion jestjs
我想验证给定的数组不包含任何值列表。有expect.arrayContaining
,但我不明白它应该如何用于此目的。
看这个例子:
expect(["1", "2", "3"]).not.toEqual(expect.arrayContaining(["3"])
Run Code Online (Sandbox Code Playgroud)
该测试失败,这是预期的行为。我想验证“3”是否不包含在数组中。一切都很好。
但是,现在我有多个值,如果数组包含其中任何一个值,我希望测试失败。
expect(["1", "2", "3"]).not.toEqual(expect.arrayContaining(["3", "4"])
Run Code Online (Sandbox Code Playgroud)
尽管我预计该测试会失败,但该测试不会失败,因为该数组包含“3”。
我能做的是:
expect(["1", "2", "3"]).not.toEqual(expect.arrayContaining(["3"])
expect(["1", "2", "3"]).not.toEqual(expect.arrayContaining(["4"])
...
Run Code Online (Sandbox Code Playgroud)
但必须为每个值重复整个期望行似乎不是正确的方法。特别是当arrayContaining
将数组作为参数时,看起来您只能向其传递一个有用的值。
我确信这种行为有有效的用例,但我问如何以更简洁的方式通过用例来实现。基本上,我希望一旦数组包含第二个数组的一个或多个值,测试就会失败。有点像“黑名单”。
Ada*_*dam 21
不要过度考虑完美的匹配器,只需编写您的测试并继续:
const shouldntHave = [4,5,6];
const subject = [1,2,3]
shouldntHave.map(m => expect(subject).not.toContain(m));
Run Code Online (Sandbox Code Playgroud)
编辑:要明确的是,我鄙视自定义匹配器。我已经在整理别人的代码来修复错误,我不想也深入研究测试基础设施。断言应该简单明了。
Ben*_*ith 10
我不会尝试让 Jest 检查数组是否相交,而是创建一个小函数来检查,然后对结果应用断言,例如
const doArraysIntersect
= (array1, array2) => array1.some(item1 => array2.includes(item1))
expect(doArraysIntersect(["1", "2", "3"], ["3"])).toBe(true);
Run Code Online (Sandbox Code Playgroud)
我还建议使用正逻辑(即尝试并最小化 的使用not
),就像我在示例中所做的那样,因为负逻辑(即负逻辑的多个实例,例如使用 ShouldntHave 而不是在同一个断言中)可能更难推理。
编辑:需要明确的是,如果使用得当,我非常喜欢自定义匹配器。当对别人的代码进行排序以修复错误时,我不想在使用双重否定的测试中暂停。断言应该简单明了:D
归档时间: |
|
查看次数: |
30044 次 |
最近记录: |