我试图在一个特定的测试中模拟useDispatch
。我试着这样嘲笑:
import * as reactRedux from "react-redux";
const useDispatchMock = jest.spyOn(reactRedux, "useDispatch");
运行测试时,useDispatch
仍然是一个正常的功能。
使用Jest26.6.3
React Redux7.2.4
您所做的是正确的,但是您只是在模拟钩子,但是我们需要的是模拟useDispatch函数的返回值。
所以你需要做这个
const useDispatchSpy = jest.spyOn(reactRedux , 'useDispatch');
const mockDispatchFn = jest.fn();
useDispatchSpy.mockReturnValue(mockDispatchFn);
现在,无论何时在代码中进行分派调用,您都可以使用mockDispatchFn
轻松断言它。这很方便,因为现在jest mock函数上可访问的所有方法现在都可以在mockDispatchFn
上使用。
您可以像
那样测试分派的动作expect(mockDispatchFn.mock.calls[0][0]).toMatchObject({ type: 'FETCHING_USER'});
我更愿意做的是创建一个进入提供者的模拟存储
const store = {
dispatch: jest.fn(),
getState: () => mockState
};
render(<provider store={store}><Component {...props}/></provider>);
下面的断言
expect(store.dispatch).toHaveBeenCalledWith(action);