在我的项目中,我使用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
如何处理此问题?