Как правильно протестировать возврат услуги резолвера в Angular - PullRequest
1 голос
/ 07 мая 2020

Я нахожу тестирование в Angular очень трудным. Пытаясь разобраться с как можно меньшим количеством шаблонов, я попытался использовать go для юнит-тестов 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();
  }));

});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...