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

使用Jasmine测试Angular ApiService时遇this.http.post is not a function错误

解决Angular ApiService测试中this._http.post is not a function错误

错误原因

你的测试代码执行顺序逻辑错误:

  • 调用TestBed.configureTestingModule时,httpClientSpyPost还未初始化,处于undefined状态,导致注入到ApiService的HttpClient是无效对象
  • 之后才创建jasmine.createSpyObj,此时服务已经注入了错误的依赖,调用post方法自然会抛出不存在的函数错误

修复步骤

调整spec.ts中beforeEach的代码顺序,先初始化spy对象,再配置测试模块:

beforeEach(() => {
  // 1. 先创建HttpClient的spy对象
  httpClientSpyPost = jasmine.createSpyObj('HttpClient', ['post']);
  
  // 2. 再配置TestBed,注入已初始化的spy
  TestBed.configureTestingModule({
    providers: [
      ApiService,
      { provide: HttpClient, useValue: httpClientSpyPost }
    ]
  });
  
  service = TestBed.inject(ApiService);
});

额外注意事项

  • 确认自定义类型ApiRequests已正确定义,避免headers对象出现类型错误影响请求配置
  • 测试用例中的done函数要确保在异步订阅完成后调用,防止测试提前终止

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 00:09:22