Тестирование Angular6: ошибка жасмина при выборе ngrx на страже - PullRequest
0 голосов
/ 28 марта 2019

У меня есть охранник, в котором я вызываю NGRX для выбора защиты

@Injectable()
export class AppGuard implements CanActivate {
  constructor(private store: Store<fromAppStore.AppState>) {}

  canActivate(): Observable<boolean> {
    return this.checkAppStore().pipe(
      switchMap(() => of(true)),
      catchError(() => of(false))
    );
  }
  checkAppStore(): Observable<boolean> {
    return this.store.pipe(select(fromAppStore.areAppsLoaded)).pipe(
      tap(loaded => {
        if (!loaded) {
          this.store.dispatch(new fromAppStore.LoadApps());
        }
      }),
      filter(loaded => loaded),
      take(1)
    );
  }
}

Ниже приведены контрольные примеры, которые я написал без использования JEST и получаю сообщение об ошибке pipe of undefined

fdescribe('AppGuard', () => {
  let service: AppGuard;
  beforeEach(() => {
    const storeStub = {
      pipe: () => ({ pipe: () => ({}) }),
      dispatch: () => ({})
    };
    TestBed.configureTestingModule({
      providers: [AppGuard, { provide: Store, useValue: storeStub }]
    });
    service = TestBed.get(AppGuard);
  });
  it('can load instance', () => {
    expect(service).toBeTruthy();
  });
  describe('canActivate', () => {
    it('makes expected calls', () => {
      spyOn(service, 'checkAppStore');
      service.canActivate();
      expect(service.checkAppStore).toHaveBeenCalled();
    });
  });
  describe('checkAppStore', () => {
    it('makes expected calls', () => {
      const storeStub: Store<any> = TestBed.get(Store);
      spyOn(storeStub, 'pipe');
      spyOn(storeStub, 'dispatch');
      service.checkAppStore();
      expect(storeStub.pipe).toHaveBeenCalled();
      expect(storeStub.dispatch).toHaveBeenCalled();
    });
  });
});

Я получаю ошибку TypeError: Cannot read property 'pipe' of undefined

(Возможно ли даже модульное тестирование команд выбора NGRX без JEST или фиктивного магазина ?)

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