Angular Jasmine异步Promise测试报错:getNewContext is not a function
问题解决:Jasmine测试中
getNewContext is not a function错误 核心原因与修复步骤
1. 修正DI令牌匹配错误
当前报错的最直接原因是测试中服务提供者的令牌(token)与实际服务类不匹配,导致Angular无法注入你定义的模拟服务,最终调用了不存在的方法。
- 检查你的服务类名称:比如实际服务类是
MyService(首字母大写的类名),而测试代码中写的是provide: myService(小写变量名),这种拼写/大小写错误会让DI系统找不到对应的模拟提供者,注入的可能是undefined,调用方法时自然报错。 - 修正后的提供者配置示例:
providers: [ { provide: MyService, // 这里必须是服务类的正确引用,与组件注入的类型一致 useValue: { select: () => [], getNewContext: () => Promise.resolve({ /* 模拟IContext结构的数据 */ }) }, } ]
2. 匹配异步方法的返回类型
原服务的getNewContext是异步方法,返回Promise<IContext>,你的模拟当前返回的是数组[],虽然这不是当前报错的直接原因,但会导致后续测试逻辑出错,需要同步修正:
- 将模拟方法改为返回一个已决议的Promise,比如
Promise.resolve({/* 符合IContext结构的测试数据 */}),确保与原方法的返回类型一致。
3. 验证组件注入的正确性
确认组件构造函数中注入的服务类型与测试中提供的令牌完全一致,比如组件中是:
constructor(private myService: MyService) {}
那么测试中的provide必须使用MyService作为令牌,不能有任何拼写或大小写差异。
内容的提问来源于stack exchange,提问作者beanic
相关产品推荐
相关产品推荐

