我正在使用 chai 编写单元测试,我想断言两个数组是不相交的(即它们不共享任何公共(public)元素)。
像这样:
assert.areDisjoint([1, 2, 3], [2, 4]); // fail
assert.areDisjoint([0], [1, 1, 2]); // pass
assert.areDisjoint(['foo'], ['foo']); // fail
assert.areDisjoint(['foo', 'foo'], []); // pass
我查看了许多不同的预定义断言 here和 here , 但似乎没有什么合适的。
我目前的(工作)方法:
assert.equal(
new Set([...array1, ...array2]).size,
new Set(array1).size + new Set(array2).size,
'expected iterables to be disjoint'
);
我想您能明白为什么我不喜欢这种方法:它使意图不明确并使代码膨胀。我想知道是否有更优雅的方式来编写此断言。
最佳答案
一种回退的可能性是创建一个辅助函数/方法作为测试代码的一部分。然后,测试看起来像:
assert.isTrue(areDisjoint([1, 2, 3], [2, 4])); // fail
在测试代码中,意图很明确,“areDisjoint”函数的实现在一处,不会导致任何代码膨胀。不幸的是,在测试失败的情况下,诊断消息并没有太大帮助,而只能告诉我们“预期为真却为假”之类的信息。
关于javascript - 如何断言两个数组不相交?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51062282/