Redux - Jest:测试具有void返回的函数

时间:2017-07-17 22:57:04

标签: redux mocking jestjs redux-thunk

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);
    });
  });
});

这个动作是我给予测试的(并且还有很多其他类似的功能。我在运行测试代码时得到了这个未定义的错误,因为函数没有返回什么。

1 个答案:

答案 0 :(得分:0)

在Redux中,商店的dispatch方法是同步的,除非您附加了改变该行为的中间件,即:返回一个承诺。

所以这可能是一个redux配置问题。确保使用相同的中间件设置测试存储,以允许您在生产中使用promise模式。

与往常一样,请务必模拟任何网络请求,以避免在测试中进行api调用。