假设我有一个重击:
import fetchSomeData from '/path/to/fetchSomeData'
const myAction = () => async dispatch => {
...
const data = await dispatch(fetchSomeData()) // `fetchSomeData` is itself a thunk
...
}
在我的测试文件中,我想指定数据是什么,我希望
fetchSomeData
函数返回:
import fetchSomeData from '/path/to/fetchSomeData'
import myAction from '/path/to/myAction'
jest.mock('/path/to/fetchSomeData')
describe('test function', () => {
beforeEach(() => { jest.clearAllMocks() })
it('tests the function', async () => {
const dispatchMock = jest.fn()
fetchSomeData.mockResolvedValueOnce({ value: 'some dummy data' })
await myAction()(dispatchMock)
expect(dispatchMock).toHaveBeenCalledTimes(1)
})
})
但是,在执行此操作时,我期望成为虚拟数据的
data
总是返回为 undefined
。
我做错了什么?
在我们的
package.json
中,我们有 jest 27.5.1 和 babel-jest 27.1.0
因为
dispatch
函数被嘲笑了。您应该使用 store.dispatch
的实际实现。
例如
fetchSomeData.js
:
const fetchSomeData = () => {};
export default fetchSomeData;
index.js
:
import fetchSomeData from './fetchSomeData';
const myAction = () => async (dispatch) => {
const data = await dispatch(fetchSomeData());
console.log('🚀 ~ myAction ~ data:', data);
};
export default myAction;
index.test.js
:
import fetchSomeData from './fetchSomeData';
import myAction from '.';
import { createStore, applyMiddleware } from 'redux';
import thunk from 'redux-thunk';
jest.mock('./fetchSomeData');
describe('test function', () => {
beforeEach(() => {
jest.clearAllMocks();
});
it('tests the function', async () => {
fetchSomeData.mockReturnValue({ type: 'FETCH_SOME_DATA', value: 'some dummy data' });
const mockStore = createStore(() => {}, applyMiddleware(thunk));
const dispatchSpy = jest.spyOn(mockStore, 'dispatch');
await myAction()(mockStore.dispatch);
expect(dispatchSpy).toHaveBeenCalledTimes(1);
});
});
测试结果:
> jest -o
console.log
🚀 ~ myAction ~ data: { type: 'FETCH_SOME_DATA', value: 'some dummy data' }
at stackoverflow/78234718/index.js:5:11
PASS stackoverflow/78234718/index.test.js
test function
√ tests the function (18 ms)
Test Suites: 1 passed, 1 total
Tests: 1 passed, 1 total
Snapshots: 0 total
Time: 1.981 s, estimated 2 s
Ran all test suites related to changed files.