测试反应:"Do not await the result of calling act(...) with sync logic"

Testing React: "Do not await the result of calling act(...) with sync logic"

使用react和react-dom 16.9.0

我在测试我的反应挂钩时收到此警告:

console.error node_modules/react-dom/cjs/react-dom-test-utils.development.js:80
Warning: Do not await the result of calling act(...) with sync logic, it is not a Promise.

我的测试代码(使用带@testing-library/react的玩笑)

...
await act( () => {
  rerender(
    <HookTester
      promise={asyncFunction}
      initialValue={'extra loading...'}
    />
  );
});

expect(asyncFunction).toHaveBeenCalledTimes(2);
...

但如果我不等待,那么我的expect就太早了。

哦!我知道了!

原来 docs 提到的同步函数是这样的:

act( () => {
  // ... some 'sync logic'
});

你等不及了。

但是你当然可以等待一个异步函数:

await act( async () => {
  // ... some 'async logic'
});

这解决了我的问题。