如何使用 jest.fn() 模拟调度
How to mock dispatch with jest.fn()
比如我想知道派发了什么,参数是什么。动作创建者是异步的,但我不关心它的实现,我只想知道组件是否使用正确的参数分派正确的动作创建者。我试过这种方法:
store.dispatch = jest.fn()
但是我无法得到任何有用的信息:
我试过用这种方法解决问题:
expect(store.dispatch.mock.calls[0].toString()).toBe(requestArticles().toString())
但我不知道这个论点,但我敢肯定,有更好的方法可以做到这一点。另外值得注意的是,我正在使用 react-testing-library,所以我不能使用 Enzyme 中的 wrapper.instance().props
。
如果你使用的是 react-redux hooks,你可以这样做:
import * as reactRedux from 'react-redux';
const mockDispatch = jest.fn();
const mockUseDispatch = jest.spyOn(reactRedux, 'useDispatch');
然后像往常一样对 mockDispatch
进行断言。
您可以模拟操作文件并检查操作是否已被调用。
例如假设 foo.action.js
是具有正在调度的操作的文件。
在导入组件之前在测试文件的开头,您可以将文件模拟为:
const yourActionMock = jest.fn();
jest.mock('<Path to the action file>/foo.action.js', () => ({
yourAction: yourActionMock
}));
现在您可以测试调用的操作:
expect(yourActionMock).toHaveBeenCalledWith(<args>)
比如我想知道派发了什么,参数是什么。动作创建者是异步的,但我不关心它的实现,我只想知道组件是否使用正确的参数分派正确的动作创建者。我试过这种方法:
store.dispatch = jest.fn()
但是我无法得到任何有用的信息:
我试过用这种方法解决问题:
expect(store.dispatch.mock.calls[0].toString()).toBe(requestArticles().toString())
但我不知道这个论点,但我敢肯定,有更好的方法可以做到这一点。另外值得注意的是,我正在使用 react-testing-library,所以我不能使用 Enzyme 中的 wrapper.instance().props
。
如果你使用的是 react-redux hooks,你可以这样做:
import * as reactRedux from 'react-redux';
const mockDispatch = jest.fn();
const mockUseDispatch = jest.spyOn(reactRedux, 'useDispatch');
然后像往常一样对 mockDispatch
进行断言。
您可以模拟操作文件并检查操作是否已被调用。
例如假设 foo.action.js
是具有正在调度的操作的文件。
在导入组件之前在测试文件的开头,您可以将文件模拟为:
const yourActionMock = jest.fn();
jest.mock('<Path to the action file>/foo.action.js', () => ({
yourAction: yourActionMock
}));
现在您可以测试调用的操作:
expect(yourActionMock).toHaveBeenCalledWith(<args>)