首页 > 解决方案 > 角度 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);
});

标签: angularunit-testingangular6karma-jasmine

解决方案


在您的测试方法中,您正在模拟 HTTP 可观察对象——这是在 Angular 中测试 HTTP 调用的好方法。

但是,如果您正在寻找一种更通用的测试rxjs 的方法,您可以使用他们的 marbles 库

事实上,我使用 forkJoin 编写了一个示例,您可以在此处找到


推荐阅读