Javascript 为什么useState不在单元测试中重新呈现组件(Jest、Ezyme)?

Javascript 为什么useState不在单元测试中重新呈现组件(Jest、Ezyme)?,javascript,reactjs,typescript,jestjs,enzyme,Javascript,Reactjs,Typescript,Jestjs,Enzyme,在玩笑中重新渲染酶包裹的组件时遇到问题。我花了一些时间来缩小问题的范围,但这似乎是useState和酶的问题 我有一个带按钮的组件。单击该按钮调用setState()函数来更新组件状态并重新渲染。例如: // ... <Drawer classes={{ paper: classes.drawer }} anchor="right" open={showInfoDrawer} variant={mobile() ? 'temporary' : 'pers

在玩笑中重新渲染酶包裹的组件时遇到问题。我花了一些时间来缩小问题的范围,但这似乎是
useState
和酶的问题

我有一个带按钮的组件。单击该按钮调用
setState()
函数来更新组件状态并重新渲染。例如:

// ...
<Drawer
  classes={{ paper: classes.drawer }}
  anchor="right"
  open={showInfoDrawer}
  variant={mobile() ? 'temporary' : 'persistent'}
  onClose={() => {
    console.log('closing'); // to check onClose simulation works
    setShowInfoDrawer(false);
  }}
  >
  // rest of component...
</Drawer>
// ...
我做了一些研究,似乎有一段时间Ezyme不支持
useState
,但这是其中的地址,看起来它是在3.11.0版,甚至3.10.0版发布的(我使用的是3.11.0,最新版本)


我做错了什么?是因为
setShowInfoDrawer()
来自父组件吗?如果是这样的话,我该如何让它工作呢?

好的,我想出来了。事后看来,这很明显。我需要将此测试作为父组件(即打开抽屉并具有
useState()
挂钩的组件)的测试运行,而不是作为抽屉组件本身的单元测试运行

test('should close ActivityInfoDrawer', () => {
  expect(wrappedActivityInfoDrawer.find(Drawer)).toHaveLength(1);
  const wrappedDrawer = wrappedActivityInfoDrawer.find(Drawer);
  // @ts-ignore
  act(() => wrappedDrawer.props().onClose()); // Logs "Clicked..."
  wrappedActivityInfoDrawer.update();
  expect(wrappedActivityInfoDrawer.find(Drawer)).toHaveLength(0); // Fails
  });