我正在使用chai编写单元测试,我想断言两个数组是不相交的(即它们不共享任何公共元素)。
类似这样的东西:
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
我目前的(有效的)方法:
assert.equal(
new Set([...array1, ...array2]).size,
new Set(array1).size + new Set(array2).size,
'expected iterables to be disjoint'
);
我想您可以理解为什么我不喜欢这种方法:它使意图不清楚,并使代码膨胀。我想知道是否有一种更优雅的方式来编写此断言。
答案 0 :(得分:1)
回退的可能性是创建辅助功能/方法作为测试代码的一部分。然后,测试将如下所示:
assert.isTrue(areDisjoint([1, 2, 3], [2, 4])); // fail
在测试代码中,意图很明确,“ areDisjoint”功能的实现在一个地方,不会引起任何代码膨胀。不幸的是,在测试失败的情况下,诊断消息并不能提供太多帮助,而只能告诉“期望的真有假”之类的信息。