наблюдаемый при редуксе: эпический юнит-тест для случая эпической ошибки - PullRequest
0 голосов
/ 23 октября 2018

В моем проекте я использую 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

Как решить эту проблему?

...