如何为redux thunk提供模拟实现?

xjreopfe  于 2022-11-12  发布在  其他
关注(0)|答案(1)|浏览(155)

我们如何模拟redux thunk的实现。
文件中有thunk:-src/actions.js

export const getRequest = () => async dispatch => {
    return await dispatch(
            fetchRequestInfo(),
        );
};

export const getBanks = () => async dispatch => {
    const response = dispatch(getRequest());
    if (!!response) {
        dispatch(success());
    } else {
        dispatch(failure());
    }
};

在我的src/actions.spec.js中,我想模拟getRequest并简单地返回一个json数据,如:-

import * as actions from 'actions';

const mockReqResponse = async () => {
    return {data: '1123'};
};

const mockGetReq = jest.spyOn(actions, 'getRequest').mockImplementation(() => mockReqResponse);

describe('getBanks should work', async () => {
    const store = mockStore(); // mocked redux store
    await store.dispatch(action.getBanks());
})

代码流没有到达getRequest的模拟实现,即mockReqResponse。我做错了什么吗?

qfe3c7zg

qfe3c7zg1#

这是测试同一个模块中的thunk时的常见问题。您可以将getRequest移到一个单独的模块中,或者查看此问题的最上面的答案:How to mock functions in the same module using Jest?这有点奇怪,但它可以工作。这允许你测试依赖于同一个模块中的几个其他thunk(或者简单的操作创建者)的thunk。

相关问题