如何对 returns angular 中的承诺的函数进行单元测试
How to unit test a function that returns a promise in angular
我在一个组件中有一个函数,它将调用一个带有 3 个参数的服务方法,并且 return 一个承诺。我想在 angular 中使用 karma jasmine 对函数进行单元测试。我在这里有什么错误吗?
组件代码
getHeaderData() {
return this.service.getList({
id: this.id,
name: this.name,
pageName: constants.PAGE_NAME
});
}
服务代码
getList(param): Promise<any> {
const params = new HttpParams()
.set('cId',param.id)
.set('cName',param.name)
.set('cPageName',param.pageName);
return new Promise((resolve, reject) => {
try {
this.httpService.get('getHeader', {params}).subscribe(data => {
resolve(data);
});
}catch (err){
reject(err);
}
});
}
规格文件代码
it('test getHeaderData()', async () => {
const serviceSpy: Service = TestBed.get(Service);
SpyOn(serviceSpy, 'getList').and.ReturnValue(Promise.resolve(constants.response));
expect(serviceSpy.getList).toHaveBeenCalled();
expect(component.getHeaderData()).toBe(constants.response);
});
服务的实际 return 值是一个对象数组,与我在常量文件中作为响应创建的对象数组相同,使用上面的代码我遇到了以下错误。我不确定这样做是否正确。
Argument of type is missing the following properties form the ' { then: ExpectedRecursive<{< TResult1 etc......
一切看起来都不错,您只是错过了 await
关键字,因为您返回的是 constants.response
(Promise<constants.response>
) 的 Promise
。因此,您必须await
它才能验证。
it('test getHeaderData()', async () => {
const serviceSpy: Service = TestBed.get(Service);
SpyOn(serviceSpy, 'getList').and.ReturnValue(Promise.resolve(constants.response));
expect(serviceSpy.getList).toHaveBeenCalled();
// Added missed `await` keyword
expect(await component.getHeaderData()).toBe(constants.response);
});
我在一个组件中有一个函数,它将调用一个带有 3 个参数的服务方法,并且 return 一个承诺。我想在 angular 中使用 karma jasmine 对函数进行单元测试。我在这里有什么错误吗?
组件代码
getHeaderData() {
return this.service.getList({
id: this.id,
name: this.name,
pageName: constants.PAGE_NAME
});
}
服务代码
getList(param): Promise<any> {
const params = new HttpParams()
.set('cId',param.id)
.set('cName',param.name)
.set('cPageName',param.pageName);
return new Promise((resolve, reject) => {
try {
this.httpService.get('getHeader', {params}).subscribe(data => {
resolve(data);
});
}catch (err){
reject(err);
}
});
}
规格文件代码
it('test getHeaderData()', async () => {
const serviceSpy: Service = TestBed.get(Service);
SpyOn(serviceSpy, 'getList').and.ReturnValue(Promise.resolve(constants.response));
expect(serviceSpy.getList).toHaveBeenCalled();
expect(component.getHeaderData()).toBe(constants.response);
});
服务的实际 return 值是一个对象数组,与我在常量文件中作为响应创建的对象数组相同,使用上面的代码我遇到了以下错误。我不确定这样做是否正确。
Argument of type is missing the following properties form the ' { then: ExpectedRecursive<{< TResult1 etc......
一切看起来都不错,您只是错过了 await
关键字,因为您返回的是 constants.response
(Promise<constants.response>
) 的 Promise
。因此,您必须await
它才能验证。
it('test getHeaderData()', async () => {
const serviceSpy: Service = TestBed.get(Service);
SpyOn(serviceSpy, 'getList').and.ReturnValue(Promise.resolve(constants.response));
expect(serviceSpy.getList).toHaveBeenCalled();
// Added missed `await` keyword
expect(await component.getHeaderData()).toBe(constants.response);
});