redux-observable:针对史诗错误案例的史诗单元测试

时间:2018-10-23 07:06:31

标签: unit-testing rxjs redux-observable

在我的项目中,我使用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

如何处理此问题?

0 个答案:

没有答案