#javascript #angular #unit-testing #ngrx
#javascript #angular #модульное тестирование #ngrx
Вопрос:
У меня есть компонент, который имеет следующую функцию:
onClearSearch() {
this.store$.dispatch(some action);
}
Попытка модульного тестирования компонента и запуска отправки хранилища не работает. Мой компонентный тест выглядит следующим образом:
let store: MockStore<State>;
beforeEach(waitForAsync(() => {
TestBed.configureTestModule({
...
providers: [
SearchStoreEffects,
provideMockActions(() => actions$),
provideMockStore({initialState, selectors: [...]})
],
...
}).compileComponents();
...
store = TestBed.inject(MockStore);
fixture.detectChanges();
}));
it('should clear search value', () => {
const storeSpy = spyOn(store, 'dispatch').and.callThrough();
component.onClearSearch();
fixture.detectChanges();
expect(storeSpy).toHaveBeenCalledTimes(1);
});
Тест всегда завершается неудачей, когда test вызывался ноль раз. Чего мне не хватает?
Ответ №1:
Вам нужно следить за экземпляром компонента
it('should clear search value', () => {
const storeSpy = spyOn(component.store$, 'dispatch').and.callThrough();
component.onClearSearch();
fixture.detectChanges();
expect(storeSpy).toHaveBeenCalledTimes(1);
});
Комментарии:
1. Что это за сообщение об ошибке?
2. То же самое: «Ожидаемая отправка spy была вызвана один раз. Он был вызван 0 раз. »
3. Если я оберну утверждение it в fakeAsync, затем вызовите tick после component.onClearSearch(); , это сработает
4. Если вы не хотите исправлять его, ожидайте, сколько раз он был вызван… вы можете просто использовать
expect(storeSpy).toHaveBeenCalled();
.
Ответ №2:
Если я оберну утверждение it в fakeAsync, затем вызовите tick после component.onClearSearch(); , это сработает