Jest 不能运行源代码中的 ES6 模块,如何解决?

阅读时长 3 分钟读完

问题描述

在使用 Jest 对前端项目进行单元测试时,我们会发现有些 ES6 模块可能无法被正确运行,而出现一系列错误。

常见的错误包括:

  • SyntaxError: Cannot use import statement outside a module
  • TypeError: is not a function

这是因为 Jest 默认不支持 ES6 模块语法,只支持 CommonJS (require/exports)模块语法。因此,当我们需要运行 ES6 模块的代码时,需要进行一些配置。

解决方法

下面介绍两种解决方式:

方式一:使用 Babel 转换 ES6 模块

首先,我们需要在项目中安装必要的依赖:

在项目的根目录中创建一个 .babelrc 文件,将以下配置添加进去:

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

然后,在项目的 jest.config.js 文件中添加以下代码:

这样,我们就可以在 test 文件中使用 ES6 模块了,比如:

方式二:使用 Jest 转换 ES6 模块

首先,我们需要在项目中安装必要的依赖:

在项目的根目录中创建一个 .babelrc 文件,将以下配置添加进去:

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

然后,在项目的 package.json 文件中添加以下代码:

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

这样我们添加了两个 jest 配置项,transformtestMatch

其中,transform 配置项的作用与前一种方式中的相同,可以使 Jest 支持运行 ES6 模块语法的代码。

testMatch 配置项则是告诉 Jest 在哪里找到我们的测试文件。这里我们指定在 __tests__ 目录下的所有 .test.js 文件中寻找测试用例。

这样,我们就可以愉快地使用 ES6 模块进行单元测试了!

总结

在前端项目中,单元测试是一个非常重要的环节。但是,由于 Jest 的默认配置问题,可能会出现无法运行 ES6 模块的情况。本文介绍了两种解决方式,一种是使用 Babel 转换 ES6 模块,另一种是使用 Jest 转换 ES6 模块。读者可以根据自己的需求选择不同的方式来解决这个问题。

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

纠错
反馈