angular - Angular 5 - 在 Jasmine / Karma 测试中使用 HTTP 拦截器作为模拟 HTTP 请求
问题描述
在使用 Jasmine 和 Karma 为使用 Angular 编写的组件编写的用例测试中,您可以使用 HTTP 拦截器作为模拟 HTTP 请求和响应吗?如果是,那么使用拦截器的一个例子是什么?
解决方案
不需要使用 HTTPInterceptors,如果你只想使用 mocked HTTP 请求,你可以简单地使用 mocked Services。假设您有一个像这样的简单 data.service.ts :
import { Injectable } from '@angular/core';
import { HttpClient, HttpHeaders } from '@angular/common/http';
import { Observable } from 'rxjs/Observable';
@Injectable()
export class DataService {
constructor(private http: HttpClient) {
}
getData(): Observable<Data[]> {
return this.http.get<Data[]>(url);
}
}
你可以在一个名为 mockData.service.ts 的文件中模拟你的:
import { Injectable } from '@angular/core';
import 'rxjs/add/observable/of';
import { Observable } from 'rxjs/Observable';
@Injectable()
export class MockDataService {
// Your data goes either here or import it via an external file
data: Data[] = [
...
];
constructor() {
}
// Use the same name for the method here
getData(): Observable<Data[]> {
return Obersvable.of(this.data);
}
在您的测试文件 component.spec.ts 中,您只需在以下内部使用模拟数据服务TestBed.configureTestingModule
:
providers: [
{
provide: DataService,
useClass: MockDataService
}
]
只需定义在您正在测试的组件中使用的所有 http 方法并提供相应的数据。
希望这可以帮助!
推荐阅读
- ios - 由于 App Store Connect 操作错误,无法分发
- python - 我尝试制作 Jarvis 的菜鸟版本,但循环播放时遇到问题
- javascript - 带有 html 内容的 bootstrap 5 弹出框
- google-app-engine - php项目中计算引擎到应用引擎排队系统的变化
- c++ - 从使用子类对象初始化的超类数组访问子类数据成员
- windows - 为什么我的 powershell 脚本没有正确包装我的路径?
- google-apps-script - 为组合图定义系列类型的问题
- json - 计算另一个 JSON 数组中数组的大小:SQL SERVER
- javascript - html select 属性不显示数据库中的值,而是显示第一个选项
- wordpress - Google API 密钥限制 - 白名单 IP 和 HTTP 引荐来源网址