【问题标题】:How to write unit tests in angular for pipe and map?如何以角度为管道和地图编写单元测试?
【发布时间】:2021-02-09 04:48:10
【问题描述】:

我需要为管道和地图以角度编写单元测试。

    public getDataById(Id): Observable<Data[]> {
    const url = "my url";
    return this.authHttpService.get(url, null, this.scope)
      .pipe(
        map(response => {
          this.data= List<Data>(response.body);
          return this.data.toArray();
        })
      );
  }

有人可以帮我解决这个问题吗?

【问题讨论】:

    标签: angular karma-jasmine


    【解决方案1】:

    这里的问题是我们如何测试使用服务的组件,并且我们在这里使用管道和映射。首先我们可能需要模拟 authHttpService。可以关注这个了解更多:https://codecraft.tv/courses/angular/unit-testing/mocks-and-spies/

    现在说到单元测试,我们需要断言一些东西。所以你可以检查getDataById是否有你mock的数据。

    我希望这会有所帮助。谢谢。

    【讨论】:

    • 我已经介绍了服务的单元测试。但我需要为地图和管道覆盖它
    【解决方案2】:

    首先模拟您的服务以返回模拟数据。调整您的模拟数据,以便可以使用管道和地图对其进行处理。

    const result = {
      data: [
        {id: 0, name: 'Temp Data 1'},
        {id: 1, name: 'Temp Data 2'},
      ]
    };
    
    export class authHttpServiceMock{
      constructor() {
      }
    
      get() {
        return Observable.of(result);
      }
    
    }
    

    第二步在 spec 文件中调用你的 getDataById(Id) 方法。

    【讨论】:

      【解决方案3】:

      由于问题是关于管道和地图的覆盖范围,所以我假设您已经知道如何模拟服务。

      第一步:始终模拟您在地图中返回的内容,在您的情况下,它将是 让我们说 response = { status: [] }

      第二步:

          httpClientSpy.get.mockReturnValue(of(respone));
      

      第三步:调用方法并订阅它,期待observable返回的结果

        instance.getDataById(Id).subscribe((result) => {
          expect(result).toEqual([]);
        });
      

      【讨论】:

        猜你喜欢
        • 2021-06-12
        • 2021-05-31
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-09-12
        • 2020-11-03
        • 2019-11-20
        相关资源
        最近更新 更多