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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 23:29:51