У меня есть некоторые проблемы при тестировании Сервиса, на который подписывается Observable в методе, который я хочу протестировать.Сама Observable оборачивает Promise с помощью from (), полученного из унаследованной службы AngularJS, называемой legacyData, следующим образом:
Служба для проверки:
refreshData(storageService: StorageService): void {
let dataObs: Observable<IResponse> = from(this.legacyData.get({}));
console.log("This is called while testing!!!); <<<<
dataObs.subscribe((response: IResponse) => {
console.log("This is NOT called while testing!!!); <<<<
let responseData: IResponseData[] = response.data as IResponseData[];
storageService.set(responseData);
},
(error: string) => loggingService.addError('Failed to get Data', error));
}
Проверка с использованием MockLegacyDataService длясмоделируйте устаревшую службу, используя обещания:
describe('dataService', () => {
let service: DataService;
let storageService: StorageService;
class MockLegacyDataService {
get(params: object) {
return Promise.resolve('some response');
}
}
beforeEach(() => {
TestBed.configureTestingModule({
providers: [
{provide: 'Data', useClass: MockLegacyDataService},
DataService,
StorageService
]
});
service = TestBed.get(DataService);
storageService = TestBed.get(StorageService);
});
it('should refresh data', () => {
spyOn(storageService, 'set');
service.refreshData(storageService);
expect(storageService.get()).toEqual('some response'); <<< this is not working!!!
expect(storageService.set).toHaveBeenCalledTimes(1); <<< this is not working!!!
});
});
Наблюдаемый код обратного вызова никогда не вызывается, как ожидалось.
Я пробовал также использовать async (), fakeAsync () / tick / flush и jasmine done(), чтобы завершить тест, но ничего из этого не сработало.
Кто-нибудь знает, как я могу это проверить?