Jest单元测试遇useModalStyles返回undefined错误,求解决建议
解决Jest测试中useModalStyles返回undefined的问题
报错原因
EditEvent组件内部调用的useModalStyles钩子依赖Chakra UI的Modal上下文,测试时未提供该上下文环境,导致钩子返回undefined,触发报错。
解决方法
方法1:用Modal组件包裹测试目标组件
按照报错提示,将EditEvent组件包裹在<Modal />中,并提供必要的props(如isOpen={true}确保渲染),同时确保测试组件处于ChakraProvider环境下:
import { ChakraProvider, Modal } from '@chakra-ui/react'; // 测试代码中修改render部分 render( <ChakraProvider> <Modal isOpen={true}> <EditEvent eventId={eventId} /> </Modal> </ChakraProvider> );
方法2:使用Chakra UI专用测试工具
Chakra UI提供了带上下文的测试render工具,可自动注入ChakraProvider,简化测试代码:
import { render } from '@chakra-ui/react/test-utils'; import { Modal } from '@chakra-ui/react'; // 测试中直接使用该render render( <Modal isOpen={true}> <EditEvent eventId={eventId} /> </Modal> );
注意事项
不要单纯依赖useModalStyles的mock,因为该钩子依赖Modal组件创建的内部上下文,仅mock钩子函数无法满足上下文依赖要求,仍会触发报错。
内容的提问来源于stack exchange,提问作者shriram choudhary
相关产品推荐
相关产品推荐

