【问题标题】:Redux dispatch function not triggered within catch block upon testing using Jest and Enzyme使用 Jest 和 Enzyme 进行测试时,未在 catch 块内触发 Redux 调度功能
【发布时间】: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


    【解决方案1】:

    缺少返回关键字。在 api 调用之前使用 return 关键字,如下所示

    export const requestRobots = apiCall => dispatch => {
      dispatch({ type: REQUEST_ROBOTS_PENDING });
      return 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 });
        });
    };
    

    【讨论】:

      猜你喜欢
      • 2020-03-12
      • 2020-04-08
      • 2021-06-24
      • 1970-01-01
      • 2017-08-12
      • 2018-09-14
      • 2019-01-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多