如果你在使用 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