Jest 是一个流行的 JavaScript 测试框架,用于编写单元测试、集成测试和端到端测试。在编写 Jest 测试时,经常会涉及到 Promise,如何正确地处理 Promise 的结果是一个重要的考虑因素,本文将详细介绍 Jest 中如何处理 Promise 的结果,并给出相应的示例代码进行说明。
1. 使用 async/await
使用 async/await 是一个易于理解和使用的方法,它允许我们等待 Promise 的 Resolve 或 Reject,然后在测试用例中对它们进行断言。如下所示:
test('async/await example', async () => { const result = await Promise.resolve(3); expect(result).toBe(3); });
在这个示例中,我们使用 async
修饰符标记了测试用例函数,并使用 await
等待 Promise 的 Resolve。然后,通过 expect
函数断言 Promise 的 Resolve 值是否等于 3。
当你使用 async/await 时,你也可以使用 try/catch 语句捕获 Promise 的 Reject:
test('async/await catch example', async () => { try { await Promise.reject('error'); } catch (error) { expect(error).toMatch('error'); } });
在这个示例中,我们使用 try/catch
语句捕获 Promise 的 Reject,并使用 toMatch
函数检查错误信息是否包含 'error'。
2. 使用 .then 和 .catch
使用 .then 和 .catch 是另一种处理 Promise 的方式,它允许我们在 Promise 变为 Resolve 或 Reject 时使用回调函数处理结果。如下所示:
-- -------------------- ---- ------- ----------- --- ------ --------- -- -- - ------------------ ------------ -- - ----------------------- -- ------------ -- - ------------------------- --- ---
在这个示例中,我们将 Promise 对象传递给 .then 函数,并使用 expect
函数断言 Promise 的 Resolve 值是否等于 3。如果 Promise 变为 Reject,则 .catch 函数将被调用,并使用 expect
函数断言错误对象是否为 null。
3. 使用 .resolves 和 .rejects
Jest 提供了 .resolves 和 .rejects 匹配器,它们可以直接对 Promise 的 Resolve 和 Reject 进行断言。如下所示:
test('.resolves example', () => { return expect(Promise.resolve(3)).resolves.toBe(3); }); test('.rejects example', () => { return expect(Promise.reject('error')).rejects.toMatch('error'); });
在这些示例中,我们使用 .resolves
和 .rejects
匹配器对 Promise 的结果进行断言。如果 Promise 变为 Resolve,则对应的 .resolves
匹配器将检查 Resolve 值是否等于 3。如果 Promise 变为 Reject,则对应的 .rejects
匹配器将检查错误信息是否包含 'error'。
总结
在 Jest 中,有多种处理 Promise 的方式可供选择。使用 async/await 是最常见的方法,它易于理解和使用,并且支持使用 try/catch 捕获 Reject。使用 .then 和 .catch 同样是不错的选择,它允许我们在 Promise 变为 Resolve 或 Reject 时使用回调函数处理结果。最后,Jest 提供了 .resolves 和 .rejects 匹配器,可以直接对 Promise 的结果进行断言。选择哪种处理方式取决于个人偏好以及测试环境的需求。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/64868c9148841e989451ab32