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

Angular单元测试报错:TypeError: 无法读取undefined的'then'属性

Angular单元测试报错:TypeError: Cannot read property 'then' of undefined

问题原因

你的onCancel方法中,this.router.navigate()调用后链式调用了.then(),但单元测试里的routerSpy.navigate默认返回undefined,并非Promise对象,因此触发了该报错。

解决方案

1. 让routerSpy的navigate方法返回已决议的Promise

在测试初始化阶段,给routerSpy.navigate指定返回值为一个已完成的Promise:

// 假设你之前是这样创建routerSpy的
const routerSpy = jasmine.createSpyObj('Router', ['navigate']);
// 添加此行,让navigate返回Promise
routerSpy.navigate.and.returnValue(Promise.resolve(true));

2. 完善测试用例(推荐)

修改测试用例,不仅验证方法被调用,还验证调用参数是否符合预期:

it("should navigate to hello", () => {
  component.onCancel();
  expect(routerSpy.navigate).toHaveBeenCalledWith(['hello']);
});

3. 处理window.router.reload()的潜在报错(可选)

如果测试运行时还会因window.router.reload()报错,需要mock该对象:

// 在测试前添加mock
window.router = { reload: jasmine.createSpy('reload') };

完成以上调整后,onCancel方法执行时所有依赖都会被正确模拟,测试即可正常通过。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 13:11:13