首页 > 解决方案 > 测试时如何在异步 api 回调中处理 Promise.all

问题描述

需要使用 100% 代码覆盖率的 jest 测试以下 DivisionService 类

APIHelper.sendRequest 进行 axios 调用并返回响应。 测试时如何在回调中处理 Promise.all?

class DivisionService {
        private static getDepartments(requestConfig: AxiosRequestConfig): Promise<DepartmentsModel[]> {
        return APIHelper.sendRequest<DepartmentsModel[]>(requestConfig)
          .then(async (res) => {
            const array = res.data;
    
            if (array && array.length > 0) {
              const promiseArr = array.map((obj: DepartmentsModel) =>
                arrayervice.getClaimDetails(obj.id),
              );
              const results: DepartmentsModel[] = await Promise.all(promiseArr);
              const arrayWithDetails: DepartmentsModel[] = [];
              for (let i = 0; i < array.length; i++) {
                arrayWithDetails[i] = results[i];
                arrayWithDetails[i].policyHolder.deptName = array[i].policyHolder.deptName;
              }
              return arrayWithDetails;
            }
            return [];
          })
          .catch((err) => {
            throw err;
          });
      }
      
      public static async getDeptsByDivision(divisionId: number): Promise<DepartmentsModel[]> {       
          const requestConfig = {
              url:'http:localhost:8080/division/departments',
              method:'GET',
              params:{divisionId}
          };

        return await this.getDepartments(requestConfig);
      }
  }  
  }

下面是我的测试用例:

在这里我嘲笑了 APIHelper jest.mock('../helpers/APIHelper'); const mockedAPIHelper = APIHelper as jest.Mocked;

const responseData = [{...}]
describe('divisionService TestSuite', () => {
  test('Should call getDeptsByDivision and fetch departments', async () => {
    mockedAPIHelper.sendRequest.mockResolvedValue({
      data: responseData,
      status: 200,
      statusText: 'ok',
      headers: {},
      config: {},
    });
    await expect(service.getDeptsByDivision(64532)).resolves.toEqual([
      {
        policyNumber: 'DPT64532-UI',
        eventDate: '2020-07-22T00:00:00',
        EventDescription: 'accident',
        causeOfLoss: {},
        StatusType: {
          id: 1,
          description: 'Open',
        },
        lastInteractionDate: '',
        nextAction: '',
        deptNumber: '96856',
        deptId: '45673',
        policyHolder: {
          contactId: 896351,
          contactName: 'jhon patrick',
        },
      },
    ]);
  });
});

执行上述测试用例时出现以下错误

如何测试具有 100% 代码覆盖率的 Service 类?

标签: typescriptunit-testingecmascript-6promisejestjs

解决方案


推荐阅读