如果在Angular/Jasmine测试中遇到服务没有被调用的问题,可以通过以下方式解决:
确认服务是否被提供:验证服务是否被 Angular 提供并注入到组件、指令、管道或其他服务中。可以使用 providers 数组在 TestBed.configureTestingModule 中提供服务并注入到组件测试中。如果服务未被提供,调用服务方法时就会出现错误。
使用 spyOn 对服务进行跟踪:当测试服务的方法时,可以使用 spyOn 来监视方法是否被调用。例如,假设服务中有一个 getData() 方法需要测试,可以使用以下代码来创建一个跟踪 getData() 方法的 spy:
let myService: MyService;
let getDataSpy: jasmine.Spy;
beforeEach(() => {
TestBed.configureTestingModule({
providers: [MyService]
});
myService = TestBed.inject(MyService);
getDataSpy = spyOn(myService, 'getData');
});
在该测试用例中调用 myService 并在之后检查是否调用了 getData() 方法:
it('should call getData method', () => {
myService.getData();
expect(getDataSpy).toHaveBeenCalled();
});
如果在测试中使用 spyOn 跟踪服务中的方法,则可以更容易地检查服务方法是否被调用。
fakeAsync 和 tick 来模拟异步操作和等待。例如:it('should call getData method and return data', fakeAsync(() => {
let responseData;
myService.getData().subscribe(data => {
responseData = data;
});
tick();
expect(getDataSpy).toHaveBeenCalled();
expect(responseData).toBeTruthy();
}));
在该测试中,使用 fakeAsync 来模拟异步操作,并使用 tick 来等待服务方法的异步操作完成。然后,检查服务方法是否被调用,并确保返回数据存在。
通过上述方法,可以准确地测试 Angular/Jasmine 服务方法是否被调用。