使用 karma 和 jasmine 在 angular 中使用 .find 方法覆盖数组的单元测试

Covering unit test for array with .find method in angular using karma and jasmine

在 angular 8

中使用 karma 和 jasmine 覆盖 spec 文件中的以下代码片段时遇到问题
myMethod(id: number): boolean {
  const data= this.myService.getSampleData();
  return data.find(item => item.id === id).count;
}

规格:

it('should call myMethod ', () => {
    spyOn(myService,'getSampleData').and.returnValue(of([{id:1,count:10}]))
    component.myMethod(1);
});

它抛出 cannot read 属性 .find of undefined。虽然我尝试了 spyOn(myService,'getSampleData').and.returnValue(of([{id:1,count:10}])) 也进入了 beforeEach 函数但是没有运气

您的方法需要获取一组项目。然而你 return Observable < Array< Item>> 来自你的间谍。试试这个 spyOn(myService,'getSampleData').and.returnValue([{id:1,count:10}])

第一个问题是,当服务似乎 return 一个项目数组时,您正在使用 of returning 一个 Observable。

其次,您没有做任何期望来验证测试中的内容。

我会这样做:

it('should call myMethod ', () => {
    spyOn(myService,'getSampleData').and.returnValue([{id:1, count:10}]);
    expect(component.myMethod(1)).toEqual(true);
});