使用happy-dom测试环境时useResizeContainer抛出错误
解决happy-dom环境下MUI DataGrid父容器高度检测错误的方案
方案1:Mock DOM尺寸相关API
happy-dom对DOM元素的尺寸计算API(如getBoundingClientRect、offsetHeight)的实现不如jsdom完整,导致DataGrid的useResizeContainer钩子无法正确获取父容器高度。可以在测试前置代码中手动mock这些API:
// 在测试文件或全局setup文件中添加 Element.prototype.getBoundingClientRect = () => ({ top: 0, left: 0, width: 800, height: 600, bottom: 600, right: 800, x: 0, y: 0, toJSON: () => {} }); // 或者mock offsetHeight/offsetWidth属性 Object.defineProperty(HTMLElement.prototype, 'offsetHeight', { get: () => 600 }); Object.defineProperty(HTMLElement.prototype, 'offsetWidth', { get: () => 800 });
如果用Jest作为测试框架,也可以用jest.fn()替代普通函数,方便后续做断言验证。
方案2:直接给DataGrid设置固定高度
绕开父容器的尺寸检测逻辑,直接在DataGrid组件上指定height属性:
<DataGrid height={600} columns={yourColumns} rows={yourRows} // 其他配置项 />
这种方式不需要依赖DOM环境的尺寸计算,能直接让组件使用指定的高度值。
方案3:启用happy-dom的CSS布局模拟(实验性)
部分版本的happy-dom提供了CSS布局模拟开关,初始化时可以尝试开启:
import { Window } from 'happy-dom'; const window = new Window({ enableCSSLayout: true }); global.window = window; global.document = window.document;
注意该功能目前处于实验阶段,不一定能完全覆盖所有布局场景,但可以尝试验证是否解决问题。
内容的提问来源于stack exchange,提问作者Henrique Ramos
相关产品推荐
相关产品推荐

