使用Jasmine toContains或toMatch进行字符串数组比较

时间:2017-11-15 20:42:17

标签: javascript regex jasmine

我有一个字符串数组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来解决此问题?

任何人都可以帮我解决这个问题。

谢谢。

2 个答案:

答案 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)

详细了解差异方法https://lodash.com/docs/4.17.4#difference