Здесь я использую redux-observable
и у меня проблемы с проверкой обработки ошибок.
См. Следующий эпизод выхода пользователя из системы:
const logoutUserEpic = (action$) => action$
.ofType(LOGOUT_USER)
.mergeMap(() =>
Observable.from(
graphQl(AuthLogout)
.catch((error) => failure(error))
)
.mergeMap(() => Observable.of(
receive(),
push('/login')
)
)
)
Вот тест, который имитирует службу graphQl
, чтобы убедиться, что она запускает действие отказа, когда обещание отклоняется:
it('should return the error action', () => {
const error = Error('fail')
request.graphQl = () => Promise.reject(error)
const action$ = ActionsObservable.of((logoutUser()))
return logoutUserEpic(action$)
.toArray()
.forEach((actions) => {
expect(actions).toEqual([{
meta: { isFetching: false },
payload: error,
type: FAILURE
}])
})
})
В тесте он отправляет действия, которые сглаживаются в mergeMap, а не ожидаемое действие сбоя в catch.
Допустимо ли иметь подобную настройку обработки ошибок, или я демонстрирую свое нубизм с RxJs?