Angular单元测试中遇TypeError:this.gridApi.setColumnDefs不是函数
解决ag-Grid单元测试中
setColumnDefs is not a function错误 问题场景
业务代码中修改列配置后调用ag-Grid的setColumnDefs方法,代码如下:
this.columnDefs.forEach((columnDef) => { columnDef.floatingFilter = this.hasFloatingFilter; }); this.gridApi.setColumnDefs(this.columnDefs);
单元测试时触发以下错误:
ERROR: 'ERROR', TypeError: this.gridApi.setColumnDefs is not a function
TypeError: this.gridApi.setColumnDefs is not a function
已从ag-grid-community导入GridApi类型并声明gridApi变量,setColumnDefs()确为ag-Grid官方支持的有效方法,但测试环境下报错。
解决方案
模拟完整的GridApi实例
单元测试环境中ag-Grid不会自动初始化真实的GridApi对象,需手动模拟包含目标方法的mock对象。以Jest为例:// 测试文件中定义mock对象 const mockGridApi = { setColumnDefs: jest.fn() }; // 将组件的gridApi赋值为mock对象(需根据测试框架调整类型断言) component.gridApi = mockGridApi as unknown as GridApi;确保测试时gridApi已正确初始化
业务代码中gridApi通常通过ag-Grid的gridReady事件获取,单元测试中需手动触发该事件或直接赋值mock对象,避免gridApi为undefined或空对象。验证类型与实例的一致性
虽然导入了GridApi类型,但如果赋值的对象未实际实现该类型的方法,TypeScript的类型断言会掩盖运行时问题。需确保测试中赋值的gridApi实例确实包含setColumnDefs方法。
内容的提问来源于stack exchange,提问作者Tejaswini Appollo
相关产品推荐
相关产品推荐

