【发布时间】:2021-01-21 06:05:33
【问题描述】:
我已经写了下面的测试用例,但它没有涵盖这一行:() => service.getUserProfile()
export function userServiceFactory(service: UserService) {
return () => service.getUserProfile();
}
测试:
import * as userserv from './user.service';
it('should call userServiceFactory function', () => {
const spy = spyOn(userService, 'getUserProfile').and.callThrough();
userService.getUserProfile();
const result = userserv.userServiceFactory(userService);
expect(spy).toHaveBeenCalled();
expect(result).toBeDefined();
});
【问题讨论】:
-
userServiceFactory不会调用userService.getUserProfile,它会返回一个在调用时会执行此操作的函数。您的测试仅通过,因为您已经直接调用了该间谍方法,这不是一个好主意 - 您可以完全删除对userServiceFactory的调用,但仍然看到expect(spy).toHaveBeenCalled()被满足... -
能否指导一下如何编写覆盖所有行的测试用例?
-
我建议你调用你的函数返回的函数。或者重新审视它返回的内容,但我们无法告诉您当前的实现是否真的正确。
-
你是这个意思吗? it('应该调用 userServiceFactory 函数', () => { Const result=userService.getUserProfile() ; expect(result).toBeDefined(); });
-
那将直接调用间谍,这又不是一个好主意。间谍的目的是让被测代码调用它,从测试代码调用它们是你做错事的标志。
标签: angular unit-testing jasmine