Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/27.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
Reactjs Jest如何基于模拟事件等待调用mock_Reactjs_Enzyme_Jestjs - Fatal编程技术网

Reactjs Jest如何基于模拟事件等待调用mock

Reactjs Jest如何基于模拟事件等待调用mock,reactjs,enzyme,jestjs,Reactjs,Enzyme,Jestjs,我有一个这样的测试失败了,因为没有调用mock,问题是mock被调用了,但在测试完成之前 test('should submit if proper values', () => { const spy = jest.fn().mockReturnValue({ data: { authenticateUser: { id: 123, token: 'lol' } } }); mountedWrapper.

我有一个这样的测试失败了,因为没有调用mock,问题是mock被调用了,但在测试完成之前

test('should submit if proper values', () => {
  const spy = jest.fn().mockReturnValue({
    data: {
      authenticateUser: {
        id: 123,
        token: 'lol'
      }
    }
  });
  mountedWrapper.setProps({
    loginMutation: spy
  });
  expect(spy).not.toHaveBeenCalled();
  email.simulate('change', {
    target: { name: 'username', value: 'email@test.com' }
  });
  password.simulate('change', {
    target: { name: 'password', value: 'secret' }
  });
  form.simulate('submit');
  expect(spy).toHaveBeenCalled();
});
但是,如果添加以下setTimeout,则可以通过测试

  setTimeout(() => {
    expect(spy).toHaveBeenCalled();
  }, 0);

然而,我正在寻找一个更好的方法来解决上述问题。有没有没有没有没有setTimeout的解决方案?

看起来您正在尝试测试一些异步代码。你读了吗?在
callbacks
部分中,您可以找到:

默认情况下,Jest测试在到达执行结束时完成。这意味着该测试将无法按预期工作:

//不要这样做!
测试('数据是花生酱',()=>{
函数回调(数据){
期望(数据)。托比(“花生酱”);
}
获取数据(回调);
});
问题在于,在调用回调之前,测试将在fetchData完成后立即完成。 有一种替代形式的测试可以解决这个问题。不要将测试放在一个参数为空的函数中,而是使用一个名为done的参数。Jest将在完成测试之前等待,直到调用完done回调

test('数据是花生酱',完成=>{
函数回调(数据){
期望(数据)。托比(“花生酱”);
完成();
}
获取数据(回调);
});
如果从未调用done(),测试将失败,这就是您希望发生的


这是回调的例子,但是你也可以使用,和。

你能不能再给我一些代码片段,比如什么是装入的包装器,电子邮件从哪里来等等?对不起,但是你的代码还是有点不懂。在
表单
上模拟
提交
时会发生什么情况。
loginMutation
是直接调用的,还是在一些操作之后调用的?你能添加一些片段来说明这一点吗?是通过还是误报?我的意思是,如果您在
setTimeout
中添加一个
expect(true)
,那么它是否仍在传递?