Asynchronous 使用Jest/Ezyme测试异步mapDispatchToProps操作时出现错误
我正在尝试在调度异步函数时测试mapDispatchToProps操作。我几乎尝试了我找到的每一个可能的解决方案,但到目前为止没有任何效果。我总是遇到同样的错误: 我得到了这个错误: TypeError:store.dispatch(…)。then不是函数 我尝试了redux模拟商店中包含的解决方案。我将我的中间件包括在我的mockStore中,但它没有解决这个问题 我在这里尝试了Michael Peyper提出的解决方案 我们创建了一个函数来构建mockStore,所以我尝试直接在测试文件中创建mockStore,但是它们都返回了相同的错误 我不能把我尝试过的所有解决方案都放在这里,因为这需要我几个星期的时间,但它给了你一个想法 以下是我的测试代码: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,所以我尝试直接在测试文件中创
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”部分。