茉莉花:测试数组是否包含具有某些属性的对象元素,而没有自定义匹配器

时间:2019-03-04 23:43:26

标签: javascript ecmascript-6 jasmine karma-jasmine

我有一个数组:

const dummyArr = [
    { name: "a", city: "c1" },
    { name: "b", city: "c2" },
    { name: "z", city: "c3" }
]

我需要编写一个茉莉花测试,以验证元素是否存在于具有属性name: b的数组中。
不确定是否可以在这里使用arrayContainingobjectContaining

注意:我需要在toHaveBeenCalledWith

中进行验证
expect(obj.setArray).toHaveBeenCalledWith("personalDetails", .......)

1 个答案:

答案 0 :(得分:0)

这是没有自定义匹配器的另一种方法。 我假设dummyArr是您的假数据,并且您想验证setArray是否被第二个元素(名为'b')调用。

expect(obj.setArray).toHaveBeenCalledWith(
  jasmine.arrayContaining([dummyArr.find(el => e.name === 'b')])
);

根据您认为可读的内容,可以在期望值之前进行查找:

const dummyEl = dummyArr.find(el => e.name === 'b');
expect(obj.setArray).toHaveBeenCalledWith(jasmine.arrayContaining([dummyEl]));

请注意,当setArray被包含该元素的任何数组调用时,例如通过整个dummyArr。如果您希望完全匹配,请改用jasmine.arrayWithExactContents()