我有一个字符串数组names
,它可以动态填充数据集中的名称。即使数据集已更改,此数组中的三个名称也始终相同。因此,在我的规范中,我想检查names数组是否包含这三个特定的名称。但是匹配者并没有帮助我茉莉花。
示例:
names = ["a", "b", "c", "d", "e", "f", "g"];
expect(names).toContain("b","d","c"); // this should return true as b, d, and c are in the names array
上述期望声明不起作用。有没有办法使用toMatch
并使用regex
来解决此问题?
任何人都可以帮我解决这个问题。
谢谢。
答案 0 :(得分:2)
您可以简单地实现以下函数,并期望结果为true或false,而不是使用toContain()
。
function arrayContains(superset, subset) {
if (subset.length === 0) return false;
return subset.every(function (value) {
return (superset.indexOf(value) >= 0);
});
}
现在,您可以在expect
语句中调用此函数,如下所示:
expect(arrayContains(names,["b", "d", "c"])).toBe(true);
正如您所提到的,这三个名称总是可以预期的,您可以将它分配给变量并在上面的函数中传递它。
希望有所帮助。如有必要,您甚至可以实施customMatcher
。
答案 1 :(得分:0)
.toContain
方法只接受一个参数,这是你的错误
所以你可以拨打三个.toContain
或尝试类似的东西
expect(_.difference(["b","d","c"], names).length).toBe(0, 'names "b","d","c" are not contained in ' + names)