You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.28 20:55:02