gpt4 book ai didi

javascript - 测试 Promise.all

转载 作者:行者123 更新时间:2023-12-03 01:49:05 24 4
gpt4 key购买 nike

我有一个看起来像这样的异步函数:

const myMethod = async () => {
await Promise.all(
someIds.map((id) => {
someMethodThatReturnsPromise(id);
});
);
doSomethingElseAfterPromisesResolve();
};

此函数包含一个错误,因为它在其映射函数中使用大括号但不返回每个 promise 。 Promise.all 消耗未定义的返回值并默默地继续执行下一条语句,无需等待。可以通过使用圆括号代替大括号,或者通过包含显式 return 语句来纠正该问题。

我的问题是,我该如何测试这个?我知道我可以使用 Promise.resolve() 或 Promise.reject() 来模拟 Promise 的不同状态,并模拟内部方法的返回值,但这并不能真正解决问题。在完整的集成测试之外,如何通过测试防止上述错误?

最佳答案

好吧,问题不在于 Promise.all() 接受 null,而是不接受。它接受的是 [null][undefined] 类型的数组(实际上是 2 个不同的东西)

正如我在评论中提到的,测试 Promise.all() 不是我会做的事情,它是第三方代码,你应该测试你自己的代码,所以我认为进行 linter 检查这种错误是一个更好的解决方案

话虽如此,您有权发表自己的意见,我只是指出实现您想要的目标的可能性。即:猴子修补

您可以像这样覆盖 Promise.all():

let originalAll = Promise.all;

Promise.all = (promises) => {
// you could check several other things
// but this covers what you wanted, right?
let isArrayWithBlanks = promises.includes(null) || promises.includes(undefined);

return isArrayWithBlanks
? Promise.reject("NO!")
: originalAll(promises);
};

现在,如果您在整个项目中使用这个经过猴子修补的 Promise.all,您就可以轻松编写测试。您决定将该代码放置在何处

希望这有帮助

关于javascript - 测试 Promise.all,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50497736/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com