【发布时间】:2019-09-03 22:41:43
【问题描述】:
我正在尝试为以前创建单个条目并现在创建多个条目的函数更新 Jest 测试。发出真正的 API 请求的实际代码有效。我遇到的问题是我无法将模拟响应格式化为与真实响应相同的形状。
OLD REAL REQUEST/RESPONSE:使用请求对象进行 API 调用,得到一个响应对象,其结果属性包含一个 id(用于后续后端调用)
UPDATED REAL REQUEST/RESPONSE:使用 Promise.all 对多个请求对象进行多次 API 调用并获取响应对象数组,每个响应都有一个结果属性和对应的 result.id
OLD MOCK:以“request object”开头,带有“result”键和数据值,模拟了开玩笑测试中所需的结果数据 这是由
为模拟调用解析的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,它看起来好像被调用了两次,但这没有任何意义。帮助!!! (如果有任何额外的细节会有所帮助,请告诉我!)
【问题讨论】:
-
您在
async函数中缺少await。你需要在Promise.all之前使用await -
@ajaiJothi 是的,这是真的!但是当我补充说响应是一样的
标签: javascript unit-testing promise mocking jestjs