You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.07 09:36:01