使用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
相关产品推荐
相关产品推荐

