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

Angular单元测试含split方法时报读取undefined属性错误如何解决

报错根因
  • 你定义的column、columnItem都是数组类型,但业务方法要求接收单个对象,直接取column.property自然是undefined,调用split方法就会抛出对应错误
  • 测试用例调用getCellData时参数顺序传反了,方法定义的入参顺序是(row: any, column: any),你实际传的是(column, value)
  • 预期结果逻辑错误:getCellData的作用是返回嵌套属性对应的值,不是返回split后的属性数组
修复后的测试用例代码
fdescribe('getCellData:', () => {
  // 定义单个column对象,不是数组
  const column: any = {
    property: 'address.street',
    label: 'Rua',
    type: 'boolean',
  };

  // 定义单个row对象,不是数组
  const row: any = {
    name: 'teste',
    address:{
      street: 'Rua dos Alfeneiros, nº 4'
    }
  };

  it('teste A', () => {
    // 调整入参顺序,预期结果对应实际的属性值
    expect(component.getCellData(row, column)).toEqual('Rua dos Alfeneiros, nº 4');
  });
});
可选:业务方法增加健壮性处理

如果要避免生产环境出现类似的空值报错,可以给业务方法加防御逻辑:

getCellData(row: any, column: any): any {
  // 先判断入参合法性
  if (!column?.property || !row) {
    return undefined;
  }
  const nestedProperties: string[] = column.property.split('.');
  let value: any = row;
  for (const prop of nestedProperties) {
    // 遍历过程中如果属性不存在就提前返回
    if (value === undefined || value === null) {
      return undefined;
    }
    value = value[prop];
  }
  return value;
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 17:45:03