Mocha 报错 ReferenceError: regeneratorRuntime is not defined

阅读时长 5 分钟读完

背景

在使用 Mocha 进行前端单元测试时,有时会出现 ReferenceError: regeneratorRuntime is not defined 的报错。这个错误通常是由于使用了 ES6 的 Generator 或者 async/await 等新特性,但是没有正确引入相关的库所致。

解决方法

方法一:使用 babel-polyfill

babel-polyfill 是一个 JavaScript 库,可以在不支持 ES6 新特性的浏览器中实现对这些特性的支持。我们可以在测试文件中引入 babel-polyfill,以便在测试时使用 Generator 和 async/await 等新特性。

首先,安装 babel-polyfill:

然后,在测试文件中引入 babel-polyfill:

方法二:使用 babel-plugin-transform-runtime

babel-plugin-transform-runtime 是 babel 的一个插件,它可以在编译时将 ES6 新特性转换为对 runtime 库的引用,从而减少打包后的文件大小。

首先,安装 babel-plugin-transform-runtime:

然后,在 .babelrc 中配置:

最后,在测试文件中引入 regenerator-runtime:

方法三:配置 webpack

如果你使用了 webpack 进行打包,可以在 webpack 的配置文件中添加以下代码:

-- -------------------- ---- -------
-------------- - -
  -- ---
  ------- -
    ------ -
      -- ---
      -
        ----- --------
        ---- -
          ------- ---------------
          -------- -
            -------- ----------------------
            -------- -----------------------------------
          -
        -
      -
    -
  --
  -- ---
--

其中,@babel/preset-env@babel/plugin-transform-runtime 分别是 babel 的预设和插件,用于将 ES6 新特性转换为对 runtime 库的引用。

最后,在测试文件中引入 regenerator-runtime:

示例代码

-- -------------------- ---- -------
-- --------
------ -------- ----------- -
  ------ ------------------
    --------- -- ------------
-

------ ----- -------- --------------------- -
  ----- ------- - ----- ------------------------------
  ----- -------- - ----- ---------------
  ----- -------- - ----- ------------------------------------
  ----- --------- - ----- ----------------
  ------ -
    ----- ---------
    ------ ---------
  --
-
-- -------------------- ---- -------
-- -------------
------ -----------------
------ - ---------- ------------- - ---- ----------

--------------------- -- -- -
  ---------- ----- ---- ----------- ----- -- -- -
    ----- ---- - ----- ------------
    ---------------------- -------- ------- ------- ---
  ---
---

------------------------- -- -- -
  ---------- ----- ---- --- ----- ---- ----------- ----- -- -- -
    ----- ---- - ----- -------------------
    --------------------------- --- ---- ----- ------- ---
    ----------------------------- --- -- ------ ----- -- -- - --- -- ------ ----- -- ----
  ---
---

结论

在使用 Mocha 进行前端单元测试时,如果出现 ReferenceError: regeneratorRuntime is not defined 的报错,可以通过引入 babel-polyfill 或者 babel-plugin-transform-runtime,或者在 webpack 的配置文件中添加相应的配置,来解决这个问题。

来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/6757cc87890bd9faa438ac8f

纠错
反馈