Jest和Redux的新手,我在测试调度到商店但不会产生返回值的函数时遇到问题。我试图按照Redux website中的示例执行此操作
return store.dispatch(actions.fetchTodos()).then(() => {
// return of async actions
expect(store.getActions()).toEqual(expectedActions)
})
然而,我有几个" fetchtodos"不会返回导致错误 TypeError 的任何内容的函数:
Cannot read property 'then' of undefined due to returning undefined
我想知道我可以做些什么来测试我的模拟商店是否正确更新。有没有办法调度函数,等待它完成,然后将模拟存储与预期结果进行比较?
由于
编辑:我们正在使用打字稿
来自tsx的行动
export function selectTopic(topic: Topic | undefined): (dispatch: Redux.Dispatch<TopicState>) => void {
return (dispatch: Redux.Dispatch<TopicState>): void => {
dispatch({
type: SELECT_Topic,
payload: topic,
});
dispatch(reset(topic));
};
}
test.tsx
const middlewares = [thunk];
const mockStore = configureMockStore(middlewares);
describe('Select Topic action', () => {
it('should create an action to select .', () => {
const topic: Topic = mockdata.example[0];
const expectedAction = {
type: actions.SELECT_TOPIC,
payload: topic,
};
const store = mockStore(mockdata.defaultState);
return store.dispatch(actions.selectTopic(topic)).then(() => {
expect(store.getState()).toEqual(expectedAction);
});
});
});
这个动作是我给予测试的(并且还有很多其他类似的功能。我在运行测试代码时得到了这个未定义的错误,因为函数没有返回什么。
答案 0 :(得分:0)
在Redux中,商店的dispatch
方法是同步的,除非您附加了改变该行为的中间件,即:返回一个承诺。
所以这可能是一个redux配置问题。确保使用相同的中间件设置测试存储,以允许您在生产中使用promise模式。
与往常一样,请务必模拟任何网络请求,以避免在测试中进行api调用。