javascript - 如何断言两个数组不相交?

标签 javascript arrays unit-testing chai assertions

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

我查看了许多不同的预定义断言 herehere , 但似乎没有什么合适的。

我目前的(工作)方法:

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/

相关文章:

复制从文件中读取的字符串并将其存储在二维字符串数组中

arrays - 如何确定元素是否存在于 Perl 6 数组中

c# - DonorManagementTests 没有默认构造函数 (nunit/moq)

javascript - 在 IE 中检测 adobe reader

javascript - 使用 Javascript 设置边界半径(每个 Angular )

javascript - 如何过滤 1 :N Add Existing Lookup Dynamics CRM 2013?

javascript - 我如何销毁这个 Backbone.js View 实例?

c# - 如何在数组中写入第一个负数?

unit-testing - Unity PerRequestLifetimeManager 单元测试

javascript - redux reducer 中的错误处理