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
});