You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何为Redux Thunks提供Mock实现?我的Mock代码未生效?

问题分析与修复方案

核心错误点

  • Mock实现不符合Thunk函数结构
    原getRequest是返回异步Thunk函数的高阶函数,你的mock直接返回了mockReqResponse函数本身,而非符合Thunk格式的函数(即接受dispatch参数的异步函数)。当getBanks中调用dispatch(getRequest())时,传入dispatch的不是合法Thunk函数,导致mock逻辑无法触发。

  • 测试结构错误
    describe的回调函数不能是async,异步逻辑必须放在it/test测试块内部执行。

  • 变量名拼写错误
    测试代码里的action.getBanks()应为actions.getBanks(),与导入的变量名保持一致。

  • 原actions逻辑缺陷
    getBanks中未await dispatch(getRequest())的结果,导致response是Promise对象,永远为真,无法进入failure分支。

修复后的测试代码

import * as actions from 'actions';
import mockStore from 'redux-mock-store';
import thunk from 'redux-thunk';

const middlewares = [thunk];
const createMockStore = mockStore(middlewares);

describe('getBanks should work', () => {
  it('dispatches success action when getRequest returns data', async () => {
    // 正确Mock:返回符合Thunk格式的函数
    jest.spyOn(actions, 'getRequest').mockImplementation(() => async () => {
      return { data: '1123' };
    });

    const store = createMockStore({});
    await store.dispatch(actions.getBanks());

    // 验证是否触发success动作
    const dispatchedActions = store.getActions();
    expect(dispatchedActions).toContainEqual(actions.success());
  });

  it('dispatches failure action when getRequest returns falsy value', async () => {
    jest.spyOn(actions, 'getRequest').mockImplementation(() => async () => {
      return null;
    });

    const store = createMockStore({});
    await store.dispatch(actions.getBanks());

    const dispatchedActions = store.getActions();
    expect(dispatchedActions).toContainEqual(actions.failure());
  });
});

同步修复原actions.js逻辑

export const getBanks = () => async dispatch => {
    // 必须await dispatch结果,才能拿到实际返回值
    const response = await dispatch(getRequest());
    if (!!response) {
        dispatch(success());
    } else {
        dispatch(failure());
    }
};

内容的提问来源于stack exchange,提问作者Hitendra singh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.21 20:27:30