使用await关键字后,React Jest测试失败

时间:2019-07-03 17:39:18

标签: javascript reactjs jestjs axios

在左侧显示了用于更改输入字段的测试用例。在await关键字之后,没有console.log并且断言失败。有人可以帮我修复测试吗?

enter image description here

模拟函数的定义如下:

 const handleChangeFn = jest.fn();
  const onCityResolvedFn = jest.fn();

  const oneCity = [{ zipCode: 8852, name: 'Altendorf'}];

  mockedAxios.get.mockImplementation(() => Promise.resolve({ data: oneCity }));

  beforeEach(() => {
    handleChangeFn.mockReset();
    onCityResolvedFn.mockReset();
  });

1 个答案:

答案 0 :(得分:1)

您不会在控制台中看到“之后”,因为onPostalCodeChange是异步功能,并且您使用了同步测试。

首先,您应该使测试异步。在测试功能之前添加“异步”:

it('should ....', async () => {...})

然后,在测试一个函数被调用多少次之前,添加一点暂停。您可以使用如下结构:

await new Promise(resolve => setTimeout(resolve, 100)) 

这种构造意味着“睡眠100毫秒”

我想,您将在控制台中看到“之后”。

如果问题仍然存在,请在此处写下您要测试的所有代码

PS 在React钩子中编写异步函数不是一个好习惯