javascript - 测试来自 POST 请求的多个响应
问题描述
我正在尝试为以前创建单个条目并现在创建多个条目的函数更新 Jest 测试。发出真正的 API 请求的实际代码有效。我遇到的问题是我无法将模拟响应格式化为与真实响应相同的形状。
OLD REAL REQUEST/RESPONSE:使用请求对象进行 API 调用,得到一个带有包含 id 的结果属性的响应对象(用于后续后端调用)
更新的真实请求/响应:使用 Promise.all 对多个请求对象进行多次 API 调用并获取响应对象数组,每个响应都有一个结果属性和对应的 result.id
OLD MOCK:以带有“result”键和数据值的“request object”开头,该值模仿了开玩笑测试中所需的结果数据。这是为模拟调用解析的
create: () => {
return new Promise((resolve, _reject) => {
setTimeout(() => {
resolve(requestObject);
}, fakeRequestTimeoutDuration);
});
}
更新的模拟:从两个“请求对象”的数组开始。我想要的是一个包含两个已解决承诺的数组,都包含正确的相应结果属性和 result.id 这是我目前拥有的,它不起作用
create: async () => {
return Promise.all(
requestObjects.map(requestObject => {
return new Promise((resolve, _reject) => {
setTimeout(() => {
resolve(requestObject);
}, fakeRequestTimeoutDuration);
});
})
);
}
},
我完全迷路了。在我的模拟响应中,我不断得到嵌套数组,或者未解决的承诺或数据被映射,以便它重复多次(上面现在正在做什么)。对于测试,我只需要一个包含两个已解析响应对象的数组。我在这里做错了什么?基于console.log,看起来某些东西被调用了两次,但这没有任何意义。帮助!!!(如果有任何额外的细节会有所帮助,请告诉我!)
解决方案
这是你想要达到的目标吗?
const requestObjects = [1, 2];
const fakeRequestTimeoutDuration = 500;
const testObj = {
create: async () => Promise.all(
requestObjects.map(requestObject => {
return new Promise((resolve, _reject) => {
setTimeout(() => {
resolve(requestObject);
}, fakeRequestTimeoutDuration);
});
})
)
};
const [obj1, obj2] = await testObj.create();
console.log(obj1) // 1
console.log(obj2) // 2
推荐阅读
- java - 在 Spring 中将文件流从 http servlet 响应转换为 multipartfile
- python - 未见数据中不存在虚拟变量级别
- c# - C# StreamWriter 替换值的字符
- batch-file - 有没有办法在批处理脚本的变量中添加多行?
- php - 3 分钟后 504 网关超时(Docker 中的 Apache)
- python - 将 pandas 数据框放在 django 模板中
- c# - 使用 EF 将来自 API 的数据加入 SQL 表
- python - 如何在 django CSV 导出中动态更改附件文件名?
- pandas - 获取多个数据框名称作为列表
- spring - 错误消息:org.hibernate.NonUniqueObjectException:具有相同标识符值的不同对象已与会话关联