为什么在测试时,导致React状态更新的代码在一种情况下应该被包装到act中,而在另一种情况下却没有?

时间:2019-11-19 21:19:02

标签: javascript reactjs testing jestjs react-testing-library

我正在使用jestreact-testing-library

做一些测试

我把它煮下来了,所以显然这不是我的完整测试。 为什么这样的代码:

test('Share renders', () => {
  const { getByText } = render(<Share />)
})

给我这个控制台错误: When testing, code that causes React state updates should be wrapped into act

但是此代码:

test('Share renders', async () => {
  const { getByText } = render(<Share />)
  const share = await waitForElement(() => getByText(/Share/i))

  expect(share).toBeVisible()
})

不是吗?

我的Share组件进行了调用,以在useEffect挂钩中获取一些用户信息并将其设置为state。这会导致在第一次安装组件时重新渲染。然后,由于状态更新,第一个示例向我抱怨。那讲得通。我的问题是,waitForElement突然在做什么,使第二个示例没有出现错误?呈现的组件没有任何变化,然后立即更新...但是现在错误消失了???

0 个答案:

没有答案