解决 Jest 中遇到的 "SyntaxError: Unexpected token import" 错误

阅读时长 4 分钟读完

前言

当你使用 Jest 进行前端单元测试时,你可能会遇到类似于下面这个报错:

这个报错通常是因为 Jest 默认只能处理 CommonJS 模块,而我们在使用 import/export 的 ES6 模块时就会出现这个错误。在本篇文章中,我们将会学习如何解决这个问题,以便你在使用 Jest 进行单元测试时能够顺利通过这个问题。

解决方案

使用 Babel 转译 ES6 模块

对于 Jest 默认只能处理 CommonJS 模块的问题,我们可以通过使用 Babel 来进行 ES6 模块的转译。首先,我们需要安装一些 Babel 相关的包:

接着在项目根目录下创建一个 .babelrc 文件,并添加如下的配置:

这个配置文件告诉 Babel,我们需要使用 @babel/preset-env 来转译代码,这个 preset 会根据当前使用的 JavaScript 版本来自动选择需要的插件和转译规则。

最后,在 jest.config.js 文件中添加如下代码:

这个配置告诉 Jest,在处理 .js 文件时使用 Babel 进行转译。

使用 Jest 支持的 ES6 模块配置

除了使用 Babel 进行转译,我们也可以直接使用 Jest 支持的 ES6 模块配置来解决这个问题。我们只需要在 jest.config.js 文件中添加如下代码:

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

这个配置告诉 Jest,我们使用 transformIgnorePatterns 来忽略对特定文件的转译,这里我们忽略了 node_module 文件夹下除了 lodash-es 外的所有文件的转译。

示例代码

下面是一个示例代码,你可以在这个基础上进行测试和学习:

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

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

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

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

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

总结

以上就是解决 Jest 中遇到的 "SyntaxError: Unexpected token import" 错误的两种方法,我们可以根据自己的项目实际情况来选择相应的方案。希望这篇文章能对你解决这个问题有所帮助。

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

纠错
反馈