【发布时间】:2022-08-10 17:08:21
【问题描述】:
我目前正在使用 Jest 和 Enzyme 测试一个 react 和 redux 课程项目。我在测试 redux 操作方法时遇到了问题。我有一个名为 requestRobots 的函数,它执行异步操作来获取数据。在获取并根据承诺结果,try/catch 块中的操作被调度。这个逻辑是使用 redux-thunk 中间件处理的。我面临的问题是,当我使用 Jest 测试此方法时,虽然捕获并记录了错误,但不会触发 catch 块内的调度。我还检查了 catch 块是否在实际项目中工作,并且当出现错误时它会在项目中调度操作。但是,当我使用 Jest 对其进行测试时,情况并非如此。我使用 redux-mock-store 来设置模拟 redux 存储,代码 sn-p 中使用的 apiCall 只是 fetch API 调用的抽象
有人可以帮我解决这个问题。 我附上了我的测试和操作代码的 sn-ps 以及我在运行测试时获得的日志的屏幕截图。
action.test.js
it(\"Test request robots action when called - unsuccessful state\", async () => {
const apiCall = jest.fn().mockReturnValue(Promise.reject(\"Not found\"));
const store = mockStore();
await store.dispatch(actions.requestRobots(apiCall));
const action = store.getActions();
console.log(action);
expect(apiCall).toBeCalled();
expect(apiCall.mock.calls.length).toBeGreaterThan(0);
console.log(apiCall.mock);
});
动作.js
export const requestRobots = apiCall => dispatch => {
dispatch({ type: REQUEST_ROBOTS_PENDING });
apiCall(\"https://jsonplaceholder.typicode.com/users\")
.then(data => dispatch({ type: REQUEST_ROBOTS_SUCCESS, payload: data }))
.catch(error => {
console.log(error);
dispatch({ type: REQUEST_ROBOTS_FAILED, payload: error });
});
};
输出日志output obtained after running the action.test.js file
提前致谢
标签: reactjs unit-testing redux jestjs