使用 Jest 测试 React 组件时出现 “找不到模块 'fs'” 错误该怎么办?

如果你在使用 Jest 测试 React 组件时,突然遇到了下面这个错误:

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

那么别慌,这篇文章将会帮助你解决这个问题。

问题原因

这个错误是因为在 Jest 运行测试时,会使用 Node.js 的模块系统去加载测试文件和被测试的代码。但是,由于 Jest 默认是运行在浏览器环境中的,所以它不能够使用一些 Node.js 独有的模块,例如 fs

那么为什么 Jest 要在浏览器环境中运行呢?原因是因为 Jest 中运行测试的代码是在一个虚拟的环境中运行的,这个环境是基于 jsdom 实现的,它能够模拟出浏览器的环境,从而能够在测试中操作 DOM。

解决方法

要解决这个问题,其实有两种方法。

第一种方法

第一种方法是在 Jest 的配置文件中指定一个运行测试的环境。默认情况下,Jest 会使用 jsdom 模拟浏览器环境运行测试。我们可以将其改为使用 Node.js 运行测试,这样就可以使用 fs 等 Node.js 独有的模块了。

只需要在 Jest 的配置文件中加入如下配置即可:

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

然后再运行测试时,Jest 就会使用 Node.js 进行测试了。

第二种方法

第二种方法是模拟 fs 模块。

如果你仍然想在浏览器环境中运行测试,但是又想使用 fs 模块,那么我们可以通过模拟一个 fs 模块来解决问题。

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

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

这段代码会将 fs 模块中的所有方法全部暴露出来,同时将 readFile 方法替换为一个什么都不干的函数,这样就能够让 Jest 在浏览器环境中运行测试了。

结论

使用 Jest 测试 React 组件时出现 “找不到模块 'fs'” 错误,可以通过在 Jest 的配置文件中指定运行测试的环境为 Node.js,或者模拟一个 fs 模块来解决问题。无论采用哪种方法,都能够让 Jest 在运行测试时能够正常使用 fs 等 Node.js 独有的模块。

来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/670f4be65f5512810263992a