角度6单元测试Forkjoin服务响应

时间:2019-01-02 11:19:18

标签: angular unit-testing angular6 karma-jasmine

我有一个正在使用的函数,其中有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);
});

1 个答案:

答案 0 :(得分:0)

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

但是,如果您正在寻找一种更通用的测试rxjs, you can use their marbles library的方式。

实际上我写了example using forkJoin which you can find here