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
- Vue项目:
- 第四步:触发待测试的业务方法,完成分支逻辑校验:
可以直接校验业务逻辑的输出结果是否符合预期,也可以断言mockGridApi.forEachNode的调用次数、调用参数是否符合预期。
小提示:不需要完全还原AG-Grid RowNode的所有属性和方法,只需要覆盖你当前测试逻辑用到的字段即可,用到其他Node方法(比如
setSelected、isSelected等)时,在mockGridNodes里追加对应的jest.fn()模拟实现就行。
内容的提问来源于stack exchange,提问作者E1dar
相关产品推荐
相关产品推荐

