使用 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);
});
在 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);
});