typescript - 测试时如何在异步 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 类?
解决方案
推荐阅读
- quantum-computing - 量子幅度编码
- crystal-reports - Crystal Reports:需要从 Running Total distinct counts 中获取百分比
- docker - 是否可以在 docker 容器中配置 prometheus 以在 docker 主机上抓取目标?
- javascript - 从头部拒绝特定的java脚本脚本使用selenium c# js
- vue.js - 背景图像资源在 Nuxtjs 中不起作用
- nsattributedstring - 无法在具有 CSS 样式的 NSAttributedString 中将文本设置为系统字体
- php - VSCode 自动补全匹配建议案例
- python - 重用现有的上下文管理器作为 pytest 夹具
- kerberos - Keycloak + Kerberos 身份验证:机制级别:无效参数 (400) - 找不到适当类型的密钥来解密 AP REP - RC4 与 HMAC
- automated-tests - 可选字段的微服务测试自动化验证