Я нахожу тестирование в 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();
}));
});