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

Angular单元测试中如何为AG-grid模拟节点?

AG-Grid单元测试模拟节点及forEachNode方法方案

不需要依赖agInit方法即可完成模拟,核心是构造符合业务逻辑的模拟节点与api对象,具体操作步骤如下:

  • 第一步:构造模拟RowNode数组,按需填充你分支逻辑需要判断的所有属性,示例如下:
// 按你的if分支判断条件配置对应节点属性,可覆盖所有分支场景
const mockGridNodes = [
  // 匹配if分支的节点示例
  { data: { id: 1, status: 'active', count: 10 }, selected: false, rowIndex: 0 },
  // 匹配else分支的节点示例
  { data: { id: 2, status: 'inactive', count: 5 }, selected: true, rowIndex: 1 }
]
  • 第二步:模拟forEachNode方法,直接遍历你构造的模拟节点数组执行回调:
const mockGridApi = {
  // 完全贴合AG-Grid原生forEachNode的调用逻辑
  forEachNode: jest.fn((callback) => {
    mockGridNodes.forEach(node => callback(node))
  })
  // 如果用到其他api方法,在这里加对应的模拟实现即可
}
  • 第三步:将模拟的gridApi挂载到待测试组件对应的AG-Grid实例属性上,不同框架操作略有差异:
    • Vue项目:wrapper.vm.gridApi = mockGridApi(如果是用ref绑定grid实例的场景)
    • React项目:wrapper.findComponent(AgGridReact).instance().api = mockGridApi
    • Angular项目:component.gridOptions.api = mockGridApi
  • 第四步:触发待测试的业务方法,完成分支逻辑校验:
    可以直接校验业务逻辑的输出结果是否符合预期,也可以断言mockGridApi.forEachNode的调用次数、调用参数是否符合预期。

小提示:不需要完全还原AG-Grid RowNode的所有属性和方法,只需要覆盖你当前测试逻辑用到的字段即可,用到其他Node方法(比如setSelected、isSelected等)时,在mockGridNodes里追加对应的jest.fn()模拟实现就行。

内容的提问来源于stack exchange,提问作者E1dar

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 11:15:03