如何断言两个数组是不相交的?

时间:2018-06-27 12:00:40

标签: javascript arrays unit-testing chai assertions

我正在使用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

我看了许多预定义的断言herehere,但似乎都不适合。

我目前的(有效的)方法:

assert.equal(
    new Set([...array1, ...array2]).size,
    new Set(array1).size + new Set(array2).size,
    'expected iterables to be disjoint'
);

我想您可以理解为什么我不喜欢这种方法:它使意图不清楚,并使代码膨胀。我想知道是否有一种更优雅的方式来编写此断言。

1 个答案:

答案 0 :(得分:1)

回退的可能性是创建辅助功能/方法作为测试代码的一部分。然后,测试将如下所示:

assert.isTrue(areDisjoint([1, 2, 3], [2, 4]));  // fail

在测试代码中,意图很明确,“ areDisjoint”功能的实现在一个地方,不会引起任何代码膨胀。不幸的是,在测试失败的情况下,诊断消息并不能提供太多帮助,而只能告诉“期望的真有假”之类的信息。