angular - 角度 6 单元测试 Forkjoin 服务响应
问题描述
我有一个正在服务的函数,其中我有 3 个 http get 调用,我用 forkJoin 创建一个数组返回响应,我将如何在 spec.ts 中测试这个服务函数?这是我的注册组件中调用服务的函数,
this.register.registrationData()
.subscribe(data => {
this.types = data[0];
this.modules = data[1];
this.packages = data[2];
});
这是我的注册服务功能,
registrationData(): Observable<any> {
const companyTypes =this.http.get(ConstantService.apiRoutes.companyTypes);
const modules = this.http.get(ConstantService.apiRoutes.modules);
const packages = this.http.get(ConstantService.apiRoutes.packages);
return forkJoin([companyTypes, modules, packages]);
}
到目前为止,这是我的规范文件,
it('Should require registration data', () => {
loginRegService.registrationData().subscribe((data) => {
expect(data).toEqual(regData);
})
const reqCompany = httpTestingController.expectOne(`${environment.apiUrl}/anonymous/companyTypes/`);
const reqModule = httpTestingController.expectOne(`${environment.apiUrl}/anonymous/modules/`);
const reqPackage = httpTestingController.expectOne(`${environment.apiUrl}/anonymous/packages/`);
expect(reqCompany.request.method).toBe('GET');
expect(reqModule.request.method).toBe('GET');
expect(reqPackage.request.method).toBe('GET');
const e1 = forkJoin([reqCompany, reqModule, reqPackage]);
reqCompany.flush(companyType);
reqModule.flush(modules);
reqPackage.flush(packages);
});
解决方案
在您的测试方法中,您正在模拟 HTTP 可观察对象——这是在 Angular 中测试 HTTP 调用的好方法。
但是,如果您正在寻找一种更通用的测试rxjs 的方法,您可以使用他们的 marbles 库。
推荐阅读
- javascript - 在javascript中使用replace时属性不应该替换
- r - 如何使用 R corrplot 函数从 Excel 中绘制数据?
- wordpress - 迁移后的wordpress找不到页面
- c# - WPF:无法清除包含 UserControl 的网格
- javascript - 如何在浏览器中运行我自己的控制台?
- vba - 在条形图中为系列添加边框
- string - 修改 ROS2 IDL 中的最大字符串长度
- android - Android Studio 依赖冲突(程序类型已存在)
- rest - 为rocket.chat 用户准备IM 空间?
- javascript - 基于计数的 JavaScript 数组到字典对话