Jest Mock material-ui-nested-menu-item时报module not found错误如何解决
错误产生原因
- Jest调用
jest.mock()模拟第三方模块时,默认会先查找该模块的真实安装路径,只有找到真实模块后才会执行你传入的mock工厂函数。如果你的项目没有安装material-ui-nested-menu-item依赖,或者Jest的模块解析配置有误找不到该模块,就会直接抛出模块未找到错误,不会走你定义的mock逻辑。 - 若已经安装该依赖仍报错,通常是Jest的模块解析配置异常:比如
moduleDirectories配置遗漏了node_modules、tsconfig配置了路径别名但Jest的moduleNameMapper没有同步映射、模块名拼写错误等。
对应解决方案
方案1:安装真实依赖(最常用)
直接安装对应依赖,让Jest可以找到模块路径,再走你的mock逻辑:
npm install material-ui-nested-menu-item # 用yarn的话执行 yarn add material-ui-nested-menu-item # 用pnpm的话执行 pnpm add material-ui-nested-menu-item
安装完成后重新执行测试即可。
方案2:使用虚拟模块模拟(无需安装真实依赖)
如果不想在项目里安装这个依赖,只需在jest.mock的第三个参数传入{ virtual: true },告诉Jest无需查找真实模块,直接使用你定义的mock返回值,修改后的测试代码如下:
jest.mock("material-ui-nested-menu-item", () => { return { __esModule: true, default: () => createElement('div') }; }, { virtual: true }) // 新增virtual配置 describe("App component", () => { beforeEach(cleanup) it("Render component", async () => { render(<App />) }) })
方案3:修复Jest模块解析配置(已安装依赖仍报错时用)
检查你的Jest配置文件(通常为jest.config.js或package.json里的jest字段):
- 确保
moduleDirectories配置包含"node_modules",示例配置:
module.exports = { // 其他配置 moduleDirectories: ["node_modules", "src"], }
- 如果你在tsconfig.json里配置了paths别名,需要同步配置Jest的
moduleNameMapper字段,和tsconfig的别名对应。 - 核对模块名拼写是否和package.json里的依赖名完全一致,避免大小写错误。
内容的提问来源于stack exchange,提问作者Kamaljeet Singh
相关产品推荐
相关产品推荐

