import { HttpClientModule } from '@angular/common/http'; import { HttpClientTestingModule, HttpTestingController } from '@angular/common/http/testing'; import { TestBed } from '@angular/core/testing'; import { RouterTestingModule } from '@angular/router/testing'; import { TranslateModule } from '@ngx-translate/core'; import { ApplicationConfigService } from 'app/core/config/application-config.service'; import { LocalStorageService, SessionStorageService } from 'ngx-webstorage'; import { ExerciseService } from './exercise.service'; describe('ExerciseService', () => { let service: ExerciseService; let httpMock: HttpTestingController; let applicationConfigService: ApplicationConfigService; beforeEach(() => { TestBed.configureTestingModule({ imports: [HttpClientTestingModule, HttpClientModule, TranslateModule.forRoot(), RouterTestingModule], declarations: [], providers: [ApplicationConfigService, LocalStorageService, SessionStorageService], }); applicationConfigService = TestBed.inject(ApplicationConfigService); service = TestBed.inject(ExerciseService); httpMock = TestBed.inject(HttpTestingController); }); it('should inject', () => { expect(service).toBeTruthy(); }); it('test Caching', () => { let isInvoked443 = 0; let isInvoked444 = 0; service.loadExercise('443').subscribe(() => { isInvoked443++; }); service.loadExercise('444').subscribe(() => { isInvoked444++; }); expect(isInvoked443).toEqual(0); // still waiting for response expect(isInvoked444).toEqual(0); // still waiting for response const testRequest443 = httpMock.expectOne({ method: 'GET', url: applicationConfigService.getEndpointFor('api/exercise/443'), }); const testRequest444 = httpMock.expectOne({ method: 'GET', url: applicationConfigService.getEndpointFor('api/exercise/444'), }); testRequest443.flush({ kaese: 'kaese', }); testRequest444.flush({ kaese: 'kaese', }); expect(isInvoked443).toEqual(1); expect(isInvoked444).toEqual(1); service.loadExercise('444').subscribe(() => { isInvoked444++; }); expect(isInvoked444).toEqual(3); // result was returned immediately from cache expect(isInvoked443).toEqual(2); httpMock.expectNone({}); }); });