如果在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 服务方法是否被调用。