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

如何将Cypress ag-grid断言代码转为通用TypeScript参数化函数?

解决Cypress中ag-grid参数化断言函数的NaN错误问题

你的问题出在动态字段访问的语法错误上,直接看修正方案:

错误原因

你在forEach里写的({ colname })是对象解构的错误用法——这里是固定提取名为colname的属性,但你的数据里根本没有这个字段,所以得到的是undefined,转成数字后变成NaN,导致断言失败。

当colname是动态变量时,不能用静态解构语法,必须用方括号访问属性的方式,或者动态解构赋值。

修正后的参数化函数

方案1:方括号访问属性(推荐,更直观)

columnValueAssertion(colname: string, asserttype: string, value: number) {
  cy.get("#myGrid").getAgGridData().should((data) => {
    data.forEach(row => {
      // 用动态变量作为属性名,方括号访问
      const columnValue = row[colname];
      // 转数字后执行断言
      cy.wrap(+columnValue).should(asserttype, value);
    });
  });
}

方案2:动态解构赋值

如果偏好解构语法,可以用ES6的动态解构:

columnValueAssertion(colname: string, asserttype: string, value: number) {
  cy.get("#myGrid").getAgGridData().should((data) => {
    data.forEach(({ [colname]: columnValue }) => {
      // 动态提取colname对应的属性,赋值给columnValue
      cy.wrap(+columnValue).should(asserttype, value);
    });
  });
}

额外优化:增加字段存在性校验

为了避免传入不存在的列名导致错误,可以先断言字段存在:

columnValueAssertion(colname: string, asserttype: string, value: number) {
  cy.get("#myGrid").getAgGridData().should((data) => {
    data.forEach(row => {
      // 先校验当前行存在目标字段
      expect(row).to.have.property(colname);
      const columnValue = row[colname];
      cy.wrap(+columnValue).should(asserttype, value);
    });
  });
}

调用时和之前一样:

columnValueAssertion('saftyRating', "be.eq", 50);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 16:32:39