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

Angular单元测试报错:Cannot read properties of undefined (reading:'viewMode')

问题解决:Angular单元测试中Cannot read properties of undefined错误

错误根源

组件中的docProcess仅声明了IDocProcess类型,但未初始化实例,测试时直接访问component.docProcess.viewMode会因docProcess为undefined抛出错误。

解决步骤

1. 初始化docProcess实例

在测试的beforeEach或测试用例中,给component.docProcess赋值一个符合IDocProcess接口的对象,确保它不是undefined:

beforeEach(() => {
  fixture = TestBed.createComponent(CallsComponent);
  component = fixture.componentInstance;
  // 初始化docProcess实例
  component.docProcess = {
    viewMode: false,
    editMode: false,
    deleteMode: false
  };
});

2. SpyOn目标方法makeCalls

要断言方法是否被调用,需先通过spyOn监听该方法,避免实际执行方法逻辑:

spyOn(component, 'makeCalls');

3. 完整测试用例(覆盖两种场景)

it('should call makeCalls when docProcess.viewMode is true', () => {
  spyOn(component, 'makeCalls');
  component.docProcess.viewMode = true;
  component.onCalling(mockArgsData);
  expect(component.makeCalls).toHaveBeenCalledWith(mockArgsData);
});

it('should NOT call makeCalls when docProcess.viewMode is false', () => {
  spyOn(component, 'makeCalls');
  component.docProcess.viewMode = false;
  component.onCalling(mockArgsData);
  expect(component.makeCalls).not.toHaveBeenCalled();
});

通用解决方案(针对类似undefined错误)

遇到Cannot read/set properties of undefined错误时,核心是确保被访问的变量已初始化:

  • 如果是组件类的属性,在测试前给它赋初始值(基本类型赋默认值,对象类型创建对应实例)
  • 如果是依赖注入的服务,需在TestBed.configureTestingModule中提供对应的mock或实例

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 03:20:36