Javascript Jest:测试数组是否不包含这些值?

Javascript Jest:测试数组是否不包含这些值?,javascript,arrays,jestjs,Javascript,Arrays,Jestjs,我想验证给定数组是否不包含任何值列表。有expect.arrayContaining,但我不知道该如何使用它 请参见此示例: expect([“1”、“2”、“3”]).not.toEqual(expect.arrayContaining([“3”])) 此测试失败,这是预期的行为。我想验证数组中不包含“3”。一切正常 但是,现在我有多个值,如果数组包含这些值中的任何一个,我希望测试失败 expect([“1”、“2”、“3”])。not.toEqual(expect.arrayContain

我想验证给定数组是否不包含任何值列表。有
expect.arrayContaining
,但我不知道该如何使用它

请参见此示例:

expect([“1”、“2”、“3”]).not.toEqual(expect.arrayContaining([“3”]))
此测试失败,这是预期的行为。我想验证数组中不包含“3”。一切正常

但是,现在我有多个值,如果数组包含这些值中的任何一个,我希望测试失败

expect([“1”、“2”、“3”])。not.toEqual(expect.arrayContaining([“3”、“4”]))
这个测试没有失败,即使我认为它会失败,因为数组包含“3”

我能做的是:

expect([“1”、“2”、“3”]).not.toEqual(expect.arrayContaining([“3”]))
expect([“1”、“2”、“3”])。not.toEqual(expect.arrayContaining([“4”]))
...
但是,必须为每个值重复整个expect行似乎不是正确的方法。尤其是当
arrayContaining
将数组作为参数,而您似乎只能向其传递一个有用的值时


我确信这种行为存在有效的用例,但我想问的是如何以更简洁的方式通过用例实现。基本上,我希望在数组包含第二个数组的一个或多个值时测试失败。类似于“黑名单”.

与其让Jest检查数组是否相交,不如创建一个小函数进行检查,然后使用Jest断言结果,例如

const doArraysIntersect 
 = (array1, array2) => array1.some(item1 => array2.includes(item1))

expect(doArraysIntersect(["1", "2", "3"], ["3"]).toBe(true);

我还建议使用积极逻辑(即尽量减少使用
而不是
),正如我在示例中所做的那样,因为消极逻辑(在我看来)更难推理。

不要过度思考完美匹配者,只需编写测试并继续:

const shouldntHave = [4,5,6];
const subject = [1,2,3]

shouldntHave.map(m => expect(subject).not.toContain(m));

对于单个值,您可以使用
.not.toContain
,对于多个值,您需要使用
jest extended
。您尝试的组合没有任何意义。
expect.arrayContaining()
用于不同的上下文。您应该使用
expect(实际)。not.toContain('3')
expect(实际).not.toContain('4')
,依此类推,
实际中预期不存在的每个值。