Заглушка на редукс-наблюдаемом эпосе
Я пытаюсь проверить функцию catch наблюдателя rxjs, но catch никогда не запускается.
test.js
it.only('On fail restore password', () => {
sandbox = sinon.stub(Observable.ajax, 'post').returns(new Error());
store.dispatch(restorePasswordVi('prueba'));
expect(store.getActions()).toInclude({ success: false, type: SET_RESTORE_PASSWORD_SUCCESS });
});
Эпический пожалуйста, смотрите https://redux-observable.js.org/
export function restorePasswordViEpic(action$: Observable<Action>, store: Store) {
return action$
.ofType(RESTORE_PASSWORD_VI)
.switchMap(({ user }) => {
store.dispatch(blockLoading(true));
return Observable
.ajax
.post(`${config.host}/auth/restore-password`, { user })
.map(() => setRestorePasswordSuccess(true))
.catch(() => {
return Observable.of(setMessage('Se ha producido un error por favor intente de nuevo.'));
});
});
}
1 ответ
Решение
Ваш окурок Observable.ajax.post
должен вернуть Observable
это выбрасывает ошибку.
.returns(Observable.throw(new Error()));
Все вместе:
it.only('On fail restore password', () => {
sandbox = sinon.stub(Observable.ajax, 'post').returns(Observable.throw(new Error()));
store.dispatch(restorePasswordVi('prueba'));
expect(store.getActions()).toInclude({ success: false, type: SET_RESTORE_PASSWORD_SUCCESS });
});
Поскольку ваша существующая заглушка возвращает только сам объект Error (а не наблюдаемое, которое выдает ошибку), это должно было привести к возникновению неперехваченной ошибки, что-то вроде:
Uncaught TypeError: Observable.ajax.post(...).map is not a function
Если вы не видите такой ошибки при запуске теста, у вас может быть что-то, что-то молча глотает ошибки, так что стоит посмотреть.