Asynchronous 使用Jest/Ezyme测试异步mapDispatchToProps操作时出现错误

Asynchronous 使用Jest/Ezyme测试异步mapDispatchToProps操作时出现错误,asynchronous,react-redux,jestjs,enzyme,redux-thunk,Asynchronous,React Redux,Jestjs,Enzyme,Redux Thunk,我正在尝试在调度异步函数时测试mapDispatchToProps操作。我几乎尝试了我找到的每一个可能的解决方案,但到目前为止没有任何效果。我总是遇到同样的错误: 我得到了这个错误: TypeError:store.dispatch(…)。then不是函数 我尝试了redux模拟商店中包含的解决方案。我将我的中间件包括在我的mockStore中,但它没有解决这个问题 我在这里尝试了Michael Peyper提出的解决方案 我们创建了一个函数来构建mockStore,所以我尝试直接在测试文件中创

我正在尝试在调度异步函数时测试mapDispatchToProps操作。我几乎尝试了我找到的每一个可能的解决方案,但到目前为止没有任何效果。我总是遇到同样的错误:

我得到了这个错误: TypeError:store.dispatch(…)。then不是函数

我尝试了redux模拟商店中包含的解决方案。我将我的中间件包括在我的mockStore中,但它没有解决这个问题

我在这里尝试了Michael Peyper提出的解决方案

我们创建了一个函数来构建mockStore,所以我尝试直接在测试文件中创建mockStore,但是它们都返回了相同的错误

我不能把我尝试过的所有解决方案都放在这里,因为这需要我几个星期的时间,但它给了你一个想法

以下是我的测试代码:

describe('Component async actions', () => {
        const middlewares = [thunk, queryMiddleware];
        const createMockStore = configureStore(middlewares);
        const store = createMockStore();

        afterEach(() => {
            jest.clearAllMocks();
        });

        const someData = {};

        const expectedActions = { 
            type: ADD_DATA,
            payload: someData
        };

        it('should handle addData', () => {
            return store.dispatch(actions.addData(someData)).then(() => {
                expect(store.getActions()[0]).toEqual(expectedAction);
            });
        });
 });
这是我的地图DispatchToprops:

function mapDispatchToProps(dispatch) {
    return {
        addData: data => dispatch(addData(data))
            .then(({ status }) => {
                dispatch(showNotification({ status }));
            }),
    };
};
如果测试中出现任何错误,我希望至少能够访问expect部分并修复此问题,但我无法通过dispatch()。然后

同样,我每次都会遇到一个错误:TypeError:store.dispatch(…)。then不是一个函数


提前谢谢

我不知道是否有人会遇到这个问题,但我找到了解决办法

首先,我必须将我的thunk中间件从redux mock store添加到我的createStore中

import thunk from 'redux-thunk';

...

const createMockStore = createStore([thunk]);
然后我模拟了addData函数,如下所示:

import { addData } from 'path/to/addData';

...

jest.mock('path/to/addData');
我在测试中添加了以下代码:

addData.mockReturnValue(() =>
        new Promise((resolve) => resolve({ status: 200 }));
        ));

它起作用了

我不知道是否有人会遇到这个问题,但我找到了解决办法

首先,我必须将我的thunk中间件从redux mock store添加到我的createStore中

import thunk from 'redux-thunk';

...

const createMockStore = createStore([thunk]);
然后我模拟了addData函数,如下所示:

import { addData } from 'path/to/addData';

...

jest.mock('path/to/addData');
我在测试中添加了以下代码:

addData.mockReturnValue(() =>
        new Promise((resolve) => resolve({ status: 200 }));
        ));

它起作用了

actions.addData
是否返回一个
Promise
?@brian住在户外是的does@brian-在户外生活中,您似乎有很多使用jest和Ezyme测试异步调度的经验。我的解决方案有效,但没有进入.then部分。我想知道是否有更好的方法来实现这一点,这样我也可以测试“showNotification”部分。是否执行
操作。addData
返回
承诺?@brian住在户外是的does@brian-在户外生活中,您似乎有很多使用jest和Ezyme测试异步调度的经验。我的解决方案有效,但没有进入.then部分。我想知道是否有更好的方法来实现这一点,这样我也可以测试“showNotification”部分。