Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/463.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何使用jest.fn()模拟调度_Javascript_Reactjs_Jestjs_React Testing Library - Fatal编程技术网

Javascript 如何使用jest.fn()模拟调度

Javascript 如何使用jest.fn()模拟调度,javascript,reactjs,jestjs,react-testing-library,Javascript,Reactjs,Jestjs,React Testing Library,例如,我想知道发送了什么以及参数。action creator是异步的,但我不关心它的实现,我只想知道组件是否使用正确的参数分派正确的action creator。我尝试过这种方法: store.dispatch = jest.fn() 但我无法获得任何有用的信息: 我试图通过以下方式解决这个问题: expect(store.dispatch.mock.calls[0].toString()).toBe(requestArticles().toString()) 但我不知道这个论点,我确信,

例如,我想知道发送了什么以及参数。action creator是异步的,但我不关心它的实现,我只想知道组件是否使用正确的参数分派正确的action creator。我尝试过这种方法:

store.dispatch = jest.fn()
但我无法获得任何有用的信息:

我试图通过以下方式解决这个问题:

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

但我不知道这个论点,我确信,有更好的方法来做到这一点。另外值得注意的是,我使用的是react测试库,所以我不能使用来自Ezyme的wrapper.instance.props。

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

从“react-redux”导入*作为reactRedux; const mockDispatch=jest.fn; const mockUseDispatch=jest.spyOnreactRedux,“useDispatch”;
然后像往常一样在mockDispatch上进行断言。

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

从“react-redux”导入*作为reactRedux; const mockDispatch=jest.fn; const mockUseDispatch=jest.spyOnreactRedux,“useDispatch”;
然后像往常一样对mockDispatch进行断言。

您可以模拟操作文件并检查是否调用了该操作

e、 g.假设foo.action.js是一个文件,其中包含要调度的操作

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

const yourActionMock = jest.fn();
jest.mock('<Path to the action file>/foo.action.js', () => ({
  yourAction: yourActionMock
}));
现在,您可以测试名为的操作:
expectyourActionMock.TohaveEncalledWith

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

e、 g.假设foo.action.js是一个文件,其中包含要调度的操作

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

const yourActionMock = jest.fn();
jest.mock('<Path to the action file>/foo.action.js', () => ({
  yourAction: yourActionMock
}));
现在,您可以测试名为的操作:
expectyourActionMock.TohaveEncalledWith

此方法不适用于我,出于某种原因未调用模拟操作。在导入要测试的组件之前,必须确保该文件已模拟。如果你已经这样做了,你能分享一下你是如何调度你的行动的吗?我已经找到了一个解决方案。我在没有使用变量的情况下模拟了该操作,然后用redux mock store.getActions检查了它是否被调用。这是一个已连接的组件,正在从mapDispatchToProps传递requestArticles。我没有直接发送任何东西,我只是模拟点击。无论如何,非常感谢!使用jest.mock解决了此问题。获取此错误:不允许jest.mock的模块工厂引用任何超出范围的变量。请确保您将mock的变量名写为yourActionMock。使用mockYourAction会生成上面提到的错误。这种方法不适用于我,因为某些原因没有调用mockYourAction。在导入要测试的组件之前,必须确保该文件已被模拟。如果你已经这样做了,你能分享一下你是如何调度你的行动的吗?我已经找到了一个解决方案。我在没有使用变量的情况下模拟了该操作,然后用redux mock store.getActions检查了它是否被调用。这是一个已连接的组件,正在从mapDispatchToProps传递requestArticles。我没有直接发送任何东西,我只是模拟点击。无论如何,非常感谢!使用jest.mock解决了此问题。获取此错误:不允许jest.mock的模块工厂引用任何超出范围的变量。请确保您将mock的变量名写为yourActionMock。使用mockYourAction会生成上述错误。