在进行前端开发的过程中,使用 Jest 来进行单元测试是一个非常好的选择。然而,在测试文件中,当使用 ES6 的 Generator 函数或 async/await 时,有时会出现 "ReferenceError: regeneratorRuntime is not defined" 的错误。
这个错误的原因是因为测试文件缺少 Babel 的 runtime 插件,而这个插件是在 Babel 转译代码时所必需的。runtime 插件含有在转义过程中所需要的辅助函数和 regenerator-runtime(支持转移 Generator 函数和 async/await 的 JavaScript 运行时库)。
为了解决这个问题,我们需要在测试文件中添加 @babel/runtime 和 @babel/plugin-transform-runtime 依赖,并在 .babelrc 文件中添加一些配置。
以下是具体的解决方案。
安装依赖
首先,我们需要在项目中安装 @babel/runtime 和 @babel/plugin-transform-runtime:
npm install --save-dev @babel/runtime @babel/plugin-transform-runtime
修改 .babelrc 文件
接下来,我们需要在项目的 .babelrc 文件中添加如下配置:
-- -------------------- ---- ------- - ---------- - - -------------------- - -------------- -------- --------- - - - -- ---------- - - ---------------------------------- - --------- - - - - -
测试文件添加 RegeneratorRuntime
import "regenerator-runtime/runtime"; describe("example test", () => { test("should work", async () => { // test code }); });
以上解决方案适用于 Jest 24.0.0 以上版本。
总结
在 Jest 测试时出现 ReferenceError: regeneratorRuntime is not defined 的问题,通常是由缺少 Babel 的 runtime 插件所造成的。我们可以通过安装 @babel/runtime 和 @babel/plugin-transform-runtime 依赖,并在 .babelrc 文件中添加一些配置来解决这个问题。同时,在测试文件中添加 RegeneratorRuntime 也可以有效解决问题。这个问题的解决方法能够帮助前端开发者更好地使用 Jest 进行单元测试。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/64535751968c7c53b07c5b85