Angular 7 / Jasmine: проблемы при юнит-тестировании, наблюдаемые в сервисе - PullRequest
0 голосов
/ 21 февраля 2019

У меня есть некоторые проблемы при тестировании Сервиса, на который подписывается 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(), чтобы завершить тест, но ничего из этого не сработало.

Кто-нибудь знает, как я могу это проверить?

...