ag-grid API 在 Angular 单元测试中未定义

2023-12-09

我正在以角度编写 Ag-grid 的单元测试用例。

测试.组件.ts:

public gridApi: GridApi; 
public gridColumnApi;

constructor(private service: Service) {
 this.initializeAgGrid(); // this method just initializing the grid
}

ngOnInit(): void {
 this.setHraDashboardData();
}

onGridReady(params) {
 this.gridApi = params.api;
 this.gridColumnApi = params.columnApi;
 this.gridApi.sizeColumnsToFit();
}

setHraDashboardData() {
 this.service.getData(1).then((data) => {
   this.uiData = data;
   this.rowData = this.generateRowData(this.data); // this method writing some logic for UI
   this.gridApi.setRowData(this.rowData);
 });
}

测试.组件.规格.ts

beforeEach(() => {
  fixture = TestBed.createComponent(HraFormComponent);
  component = fixture.componentInstance;
  fixture.detectChanges();
});

it('grid API is available after `detectChanges`', async() => {
  await fixture.whenStable().then(()=>{
    fixture.detectChanges();
    const elm = fixture.debugElement.nativeElement;
    const grid = elm.querySelector('#Grid');
    const firstRowCells = grid.querySelectorAll('div[row-id="0"] div.ag-cell-value');
    const values = Array.from(firstRowCells).map((cell: any) => cell.textContent.trim());

    // assert
    expect(component.rowData[0].title).toEqual(values[0]);
  });
});

现在上述测试用例由于以下原因而失败component.gridApi is undefined,所以它无法为网格分配值this.gridApi.setRowData(this.rowData).


在编写涉及 ag-grid api 可用性的单元测试时,在这种情况下,有两件事可以帮助您:

而不是等待gridReady事件,您可以尝试使用this.gridOptions.api(this.gridOptions.api.setRowData ...) 因为大多数时候,它初始化得更快(在 onGridReady 触发之前)

您可以结合使用来做到这一点设置超时函数也是如此,当我过去遇到与您类似的问题时,我多次使用了该函数:

代替:

this.gridApi.setRowData(this.rowData);

Try:

setTimeout(() => { this.gridApi.setRowData(this.rowData);}, 100);

您可以增加时间设置超时到 200、300、500 或更多,对我来说,大部分时间只是使用settimeout用非常小的数字(10 毫秒)就可以了。

The 设置超时这不是一个理想的解决方案,但在许多情况下都有效。第一个选项应该更干净,您甚至可以添加超时以使其正常工作。

Use a 假异步区而不是async一个也会有帮助。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

ag-grid API 在 Angular 单元测试中未定义 的相关文章

随机推荐

  • 使 Excel 图表上的 X 轴和 Y 轴比例相等

    我希望 Excel 图表的 X 轴和 Y 轴在屏幕上具有相同的比例 因为我正在绘制地理数据 1 公里 x 1 公里的正方形应该看起来像一个正方形 而不是一个矩形 即地图在一个或另一个方向上不会被挤压 在 Matlab 中 执行此操作的命令是
  • 无法在 Cron 中运行 Python 脚本

    我有一个简单的 Python 脚本 我试图将其设置为 cron 作业 但它拒绝运行 当我单独运行它时 它确实会运行 并将其称为 python script py 我尝试在 crontab 中设置环境变量 但无法让它工作 我的 crontab
  • C 位标志枚举应如何转换为 C++?

    C 大部分是 C 的超集 但并非总是如此 特别是 虽然 C 和 C 中的枚举值都隐式转换为 int 但反之则不然 只有在 C 中 int 才会转换回枚举值 因此 通过枚举声明定义的位标志无法正常工作 因此 这在 C 中是可以的 但在 C 中
  • 在 PDF 页面上运行 Chrome 插件

    使用 Chrome 扩展程序 我想 检测当前选项卡是否已加载 PDF 文件 向 popup html 添加一个按钮以提供将 PDF 转换为 HTML5 的功能 获取 PDF 文件的 URL 并将其发送到在线服务 为了实现 1 我认为本页上的
  • Javascript:无法使用 getElementById 获取元素[重复]

    这个问题在这里已经有答案了 好的 我需要新的眼光 因为我还在这个问题上待了一个小时 这是我的简单 HTML 代码 testssio html 其中包含 javascript 脚本 div div 但这不起作用 使用调试器 我得到
  • 在 Android 中按下按钮时增加按钮的大小

    如何使按钮的大小在按下时稍微增大并在释放时再次减小 这是为了通过使用尺寸和不同的颜色来突出显示按下的按钮 问候 琪琪 做你的Button一个字段 并修改其大小OnTouchListener与之相关 使用 OnTouchListener 你可
  • Doctrine DQL 条件查询

    我正在尝试使用 Doctrine 的查询生成器构建动态查询 假设我还想在下面选择一个结束时间 仅当输入一个结束时间时 我如何有条件地将其添加到声明中 query this gt getEntityManager gt createQuery
  • Excel VBA - 如果单元格是整数,则删除整行

    我一直在尝试使用一些关于如何删除 Excel VBA 上的整行的代码片段 但我无法修改它们以包含 IsNumber 验证 我需要能够选择一个活动区域 例如 Set r ActiveSheet Range A1 C10 当它逐行浏览时 并检查
  • 脚本每 24 小时重新启动一次 Heroku [重复]

    这个问题在这里已经有答案了 我有一个 Python 中的 Telegram 机器人 但它大约每 24 小时在工作线程中通过相同的命令重新启动一次 我正在使用免费版本的 dynohours 如何禁用此重新启动 你不能 您必须设计您的应用程序
  • ruby on Rails f.select 具有自定义属性的选项

    我有一个表单选择语句 如下所示 f select country id countries map c c name c id 这段代码的结果是
  • 在快照侦听器中添加一个新文档时,Firestore 文档读取成本

    我有一个文档侦听器 可以侦听与此类似的前 25 个文档 db collection cities whereField state isEqualTo CA limit to 25 addSnapshotListener querySnap
  • 使用 Selenium WebDriver 和 Java Robot 类上传文件

    我正在使用 Selenium WebDriver 和 Java 我需要自动化文件上传功能 我尝试了很多 但是当单击 浏览 按钮并打开一个新窗口时 脚本会停止进一步执行 并且会卡住 我尝试了 FireFox 和 IE 驱动程序 但没有成功 我
  • 一次检查所有 $_POST 变量

    有没有办法一次检查一个表单中的所有帖子变量 以至少验证它们不为空 例如 if isset ALL POST echo one of your fields is not completed 您可以创建一个必填字段的数组并循环遍历该数组 re
  • Kendo Grid 外键列动态绑定

    Html Kendo Grid IEnumerable
  • 如何检测手机是否连接android auto

    我正在开发一个音频播放器应用程序 我需要确定用户的设备何时连接到 Android Auto 该应用程序具有警报功能 我想确保它不会在用户开车时响起 确定我的音乐服务是否 MediaBrowserService 有效 我可以在 onCreat
  • 方言错误消息流口水

    我已经在 Tomcat 7 中部署了一个 webApp 我正在使用 Drools 现在 当我连续运行时 Drools 会抛出运行时异常 我也在类路径中添加了 core 3 4 2 v 883 R34x jar 请查找错误日志 Some er
  • C#串行端口监听器[关闭]

    Closed 这个问题需要多问focused 目前不接受答案 在 C 中是否有任何串行端口侦听器 如果串行端口上有任何数据 它将调用我的函数 我唯一的想法是使用无限循环 如下所示 while true if someDataOnSerial
  • 用于选择单选按钮的greasemonkey脚本

    我是新来的 我有一个关于油脂猴的问题 一个页面包含多个单选按钮值 需要做出一个选择 这个正确的选择选项隐藏在页面中 单选按钮以结构如下的形式出现
  • 如何强制 npm 不创建本地包的符号链接?

    我下载了 npm 包的本地副本并将其解压到桌面上 然后我用了npm install directory 安装它 我注意到 当我删除桌面目录时 应用程序说它找不到已安装的模块 经过进一步调查 我注意到包裹在node modules但它旁边有箭
  • ag-grid API 在 Angular 单元测试中未定义

    我正在以角度编写 Ag grid 的单元测试用例 测试 组件 ts public gridApi GridApi public gridColumnApi constructor private service Service this i