如何以角度编写服务页面的单元测试用例?

时间:2020-07-01 10:58:38

标签: angular typescript jasmine karma-runner

如何为服务页面Jasmine编写测试用例? 我尝试为以下功能编写单元测试。

service.page.ts

    get(): Observable<Array<modelsample>> {
        const endpoint = "URL" ;

        return this.http.get<any>(endpoint)
          .pipe(
            map((item) => {
              return item.data.items.map(item => {
                return new department(item.name, item.id, item.isActive)
              })
            })
          )
      };

我写了

service.spec.ts

     it('should retrieve list of  via GET ', (done) => {
    
        const dummydata: APIResponse<modelsample> = {
          isSuccess: true,
          message: 'Departments retrieved successfully',
          data: [
            {
              name: 'string',
              id: 8,
              isActive:true
            },
            {
              name: 'string',
              id: 8,
              isActive:true
            },
    
          ]
    
        };
    
        expect(service.get).toBeTruthy(); 
        service.get().subscribe((data) => {
         expect(data.length).toBe(2);
          expect(data).toEqual(dummydata.data);
          done();
        });
    
        const request = httpMock.expectOne('url');
        expect(request.request.method).toEqual('GET');
        request.flush(dummydata.data);
       
      });

这是我的API响应界面

export interface APIResponse<T> {
    isSuccess: boolean;
    message: string;
    errorCode?: string;
 data?:T[];
}


 

我收到错误“地图”未定义”

1 个答案:

答案 0 :(得分:1)

您的虚拟数据不正确。它期望items对象具有data属性。 (item.data.items.map

您应该考虑使其类似于:

const dummydata: APIResponse<modelsample> = {
  // ...
  data: {
    items: [
      {
        name: 'string',
        id: 8,
        isActive:true
      },
      {
        name: 'string',
        id: 8,
        isActive:true
      },
    ]
  }
};