具有依赖项的 redux-observable 单元测试 EPCI



我有一个带有以下签名的史诗(注意依赖关系(

export const incrementalSearchEpic = (action$, store, { incrementalSearchService }) => {
// eslint-disable-next-line max-len
return action$.ofType('SEARCH_STORES').mergeMap((action) =>
incrementalSearchService.performIncrementalSearch(action)
);
};

现在我需要对此进行单元测试,这是我的单元测试代码

beforeEach(() => {
epicMiddleWare = createEpicMiddleware(incrementalSearchEpic,
{
dependencies: {
incrementalSearchService: IncrementalSearchServiceMock
}
});
const mockStore = configureMockStore([epicMiddleWare]);
const getState = {}; // initial state of the store         
store = mockStore(getState);
});
// eslint-disable-next-line max-len
it('calls the incrementalSearchService->performIncrementalSearch with the parameters when called', () => {
//dispatch the incremental search action
const searchStore = {
type: 'SEARCH_STORES',
SearchText: 'Aldi'
};
store.dispatch(searchStore);
expect(store.getActions()).toEqual([
searchStore
]);
});

但是当我运行代码时,出现以下错误

类型错误:无法读取未定义的属性"执行增量搜索">

似乎依赖项没有正确传入。

我刚刚意识到:如果 redux-observable 没有注入提供的依赖项对象,你实际上会得到Cannot read property 'incrementalSearchService' of undefined不会执行增量搜索,因为 redux-observable 默认情况下不会注入对象 - 它没有错误,因为它确实在传递你的对象。

相反,可能的问题是您对IncrementalSearchServiceMock的导入或定义实际上是undefined。也许是错误的命名导入或类似名称。

如果无法立即了解原因,请在 beforeEach 的开头暂停调试器,并确认IncrementalSearchServiceMock的值不是未定义的。

最新更新