Angular单元测试:如何用Jasmine/Karma模拟HttpResponse
解决HttpResponse模拟的类型匹配问题
你的模拟响应触发类型错误,核心原因是手动构造的对象没有完全匹配HttpResponse的类型结构,多个属性的类型不符合要求:
clone是HttpResponse的方法,不是空字符串headers需要是HttpHeaders实例,而非空字符串ok是布尔类型(true/false),不是空字符串url允许为字符串或null,但不能用空字符串(无需求时可设为null)
推荐解决方案:直接实例化HttpResponse
这是最可靠的方式,能确保类型完全对齐:
import { HttpResponse } from '@angular/common/http'; const resp = new HttpResponse({ body: null, status: 200, statusText: 'Success', url: '', // 或根据需求设为null ok: true });
备选方案:修正手动模拟的对象
如果必须手动构造对象,需修正属性类型并断言为HttpResponse:
import { HttpEventType, HttpHeaders } from '@angular/common/http'; const resp = { body: null, status: 200, statusText: 'Success', type: HttpEventType.Response, clone: () => ({ ...resp }), // 模拟clone方法 headers: new HttpHeaders(), // 使用HttpHeaders实例 url: '', ok: true } as HttpResponse<any>;
内容的提问来源于stack exchange,提问作者limiwinks
相关产品推荐
相关产品推荐

