Модульный тест компонента ngrx: как установить значение хранилища и выполнить вызов по подписке - PullRequest
0 голосов
/ 27 марта 2019

Я пишу модульный тест для моего компонента. Я хочу протестировать / охватить ту часть, в которой я вызываю функцию calcJohnDoe внутри моей подписки. Пожалуйста, обратитесь ниже:

ngOnInit(): void {
    this.authStore$ = this.store.select('auth');
    this.authStore$.subscribe(authData => {
      if (authData && authData.myprop) {
          this.calculateJohnDoe();
        }
    });
}

В своей спецификации я пытаюсь сделать следующее:

describe(..., () => {
  let mockStore: MockStore<AuthState>;

    // Testbed configuration
      providers: [ Store ]
      }).compileComponents();

      mockStore = TestBed.get(Store);
    ...

    it('should call the function', () => {
        mockStore.setState({
           myprop: true
        });
        const spy = jest.spyOn(LoginComponent.prototype, 'calculateJohnDoe');
        expect(spy).toHaveBeenCalled();
    });

    ...

});

Но проблема в том, что я никогда не получаю истинно обновленное событие / callack магазина myprop в моем файле ts компонента с именем.

1 Ответ

1 голос
/ 27 марта 2019

Вы можете создать фиктивный сервис, представляющий ваш магазин, этот класс будет имитировать наблюдаемый предмет с атрибутом _anObservable:

class MockService {
    _anObservable = new Subject();
    select(prop: string) {
        return this._anObservable.asObservable();
    }
}

describe(..., () => {

    // Testbed configuration
    providers: [
        { provide: YourStore, useClass: MockService }
    ]

    ...

    it('should call the function', inject([YourStore], (store) => {
        const spy = jest.spyOn(LoginComponent.prototype, 'calculateJohnDoe');
        store._anObservable.next({
            myprop: true
        });
        expect(spy).toHaveBeenCalled();
    }));

    ...

});
...