Как правильно протестировать возврат службы резолвера в Angular

Мне очень сложно проводить тестирование в Angular. Пытаясь разобраться с как можно меньшим количеством шаблонов, я попытался пройти юнит-тесты jest/ Spectator.

Я хочу протестировать резольвер. Либо он должен возвращать Observable типа Contact[], либо EMPTY из catchError(). Есть только два исхода.

Вот что у меня есть до сих пор, и я знаю, что это грубо.

resolve(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable<any> | 
   Observable<never> {
  return this.contactsService.getContacts()
    .pipe(
      catchError(err => EMPTY),
      tap(res => res)
    );

}

describe('ContactsResolverService', () => {
 let spectator: SpectatorService<ContactsResolverService>;

 const createService = createServiceFactory({
   service: ContactsResolverService,
   imports: [HttpClientModule]
 });

 beforeEach(() => {
   spectator = createService();
  });

 it('should call the resolve class method', fakeAsync ( () => {

   const contactsService = spectator.inject(ContactsService);
   contactsService.getContacts.andReturn( of( ['ContactObj', 'ContactObj', 'ContactObj']) );
   const mockSnapshot = createSpyObj<RouterStateSnapshot>('RouterStateSnapshot', 
   ['toString']);
   const mockR = createSpyObj<ActivatedRouteSnapshot>('ActivatedRouteSnapshot', 
   ['toString']);
   flushMicrotasks();
   const r = spectator.service.resolve(mockR, mockSnapshot)
   expect(r).toHaveBeenCalled();
  }));

});

0 ответов

Другие вопросы по тегам