如何使用jest.fn()模拟分发

时间:2020-06-16 11:52:06

标签: javascript reactjs jestjs react-testing-library

例如,我想知道已调度了什么和参数。动作创建者是异步的,但是我不关心它的实现,我只想知道组件是否使用正确的参数分派了正确的动作创建者。我尝试过这种方法:

store.dispatch = jest.fn()

但是我无法获得任何有用的信息:

this is what I can get from store.dispatch.mock

我试图通过这种方式解决问题:

expect(store.dispatch.mock.calls[0].toString()).toBe(requestArticles().toString())

但是我不知道这种说法,而且我敢肯定,有更好的方法可以做到这一点。还要注意,我正在使用react-testing-library,所以不能使用来自Enzyme的wrapper.instance().props

2 个答案:

答案 0 :(得分:1)

您可以模拟动作文件并检查动作是否已被调用。

例如可以说foo.action.js是已分派动作的文件。

在导入组件之前,在测试文件的开头,您可以将文件模拟为:

const yourActionMock = jest.fn();
jest.mock('<Path to the action file>/foo.action.js', () => ({
  yourAction: yourActionMock
}));

现在您可以测试以下操作: expect(yourActionMock).toHaveBeenCalledWith(<args>)

答案 1 :(得分:0)

如果您使用的是react-redux钩子,则可以这样做:

Out[8]: <tf.Tensor: shape=(), dtype=float32, numpy=0.0>  # state reset

,然后照常在import * as reactRedux from 'react-redux'; const mockDispatch = jest.fn(); const mockUseDispatch = jest.spyOn(reactRedux, 'useDispatch'); 上进行断言。