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

Angular单元测试调用getModels报Cannot read properties of undefined问题

问题原因
  • 你没有在测试执行前给ThinComponent的必填@Input() component赋值,执行spyOn(component.component, 'getModels')时,component.component是undefined,直接读取undefined的getModels属性就会触发该报错。
  • 此外组件内的page属性也未做初始化赋值,后续测试getContents方法时也会触发同类报错,建议同步处理。
解决方案

按如下步骤调整单元测试逻辑即可:

  1. 在调用spyOn前,先创建BrComponent和Page的mock对象,赋值给组件实例的对应属性
  2. 再对getModels方法做spy stub
  3. 最后执行变更检测和断言

调整后的参考测试代码:

it('should create', () => {
  // 1. 先初始化mock的BrComponent对象,赋值给组件输入属性
  component.component = jasmine.createSpyObj('BrComponent', ['getModels']);
  // 可选:如果后续要测getContents,也提前mock Page
  component.page = jasmine.createSpyObj('Page', ['getContent']);

  // 2. 再spy对应的方法,指定返回值
  component.component.getModels.and.returnValue({foo: 'bar'});

  // 3. 触发变更检测执行ngOnInit
  fixture.detectChanges();

  expect(component).toBeTruthy();
});

如果不用jasmine的spyObj,也可以手动构造mock对象:

component.component = {
  getModels: () => ({foo: 'bar'})
} as BrComponent;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 07:06:03