В моем проекте я использую redux-observable для обработки асинхронного HTTP-персонала.Я столкнулся с вопросом о модульном тестировании об эпопее.
Эпопея выглядит следующим образом:
export const epic = (action$, store, { Api }) =>
action$
.ofType(REQUEST)
.switchMap(({ payload }) => Api.findById(payload))
.map(res => success(res))
.catch((err) => Observable.of(failure(err)))
, а модульное тестирование для части ошибки запроса выглядит следующим образом:
it('should handle epic failure', () => {
const action$ = ActionsObservable.of({
type: REQUEST,
payload: { params: {} }
})
const Api = {
findById: () => {
return Observable.throw('get detail failed')
}
}
epic(action$, null, { Api })
.subscribe(actions => {
expect(actions).toHaveProperty('type', FAILURE)
expect(actions).toHaveProperty('error', 'get detail failed')
})
})
вышеТестирование может выполняться как ожидалось.Но мне нужно изменить мой Epic следующим образом:
export const epic = (action$, store, { geoFenceApi }) =>
action$
.ofType(REQUEST)
.switchMap(({ payload }) => geoFenceApi.findById(payload))
.map(res => success(res))
.catch((err, stream) => Observable.merge(Observable.of(failure(err)), stream))
Я изменяю часть catch
, чтобы добавить stream
, таким образом, Epic может продолжать слушать вызов, вместо завершения.
Но в этом случае ошибка в отчете о тестировании выглядит следующим образом:
RangeError: Maximum call stack size exceeded
Как решить эту проблему?