如何将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
相关产品推荐
相关产品推荐

