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

Jest运行时找不到构建生成的dist/versioninfo模块,jest.mock无效如何解决?

Cannot find module 'dist/versioninfo' from '../src/app.controller.ts'

这个问题的核心有两点:

  1. 你此前使用的jest.mock用法错误,第二个入参需要返回模块的导出对象,而非源码字符串
  2. Jest默认的模块搜索路径未包含项目根目录,即使dist目录下存在对应文件也无法被识别
解决方案

方案1:修正mock写法(快速适配单测试文件)

将现有mock代码替换为如下写法,放在测试文件最顶部,所有导入逻辑之前:

jest.mock('dist/versioninfo', () => ({
  VERSAO: "0.0.1 (dev)",
  DESCRICAO: ""
}))

如果修改后仍报模块不存在,在jest.config.js中添加根目录到模块搜索路径:

module.exports = {
  // 保留原有配置,新增如下字段
  moduleDirectories: ['node_modules', '<rootDir>']
}

方案2:全局模块映射(多测试文件共用,无需重复写mock)

  1. 在项目根目录新建__mocks__/versioninfo.ts,写入测试用的导出内容:
export const VERSAO = "0.0.1 (dev)";
export const DESCRICAO = "";
  1. 在jest.config.js中添加模块映射规则:
module.exports = {
  // 保留原有配置,新增如下字段
  moduleNameMapper: {
    '^dist/versioninfo$': '<rootDir>/__mocks__/versioninfo.ts'
  }
}

配置完成后,所有测试文件导入dist/versioninfo时会自动加载mock内容,无需单独声明。

方案3:预生成构建文件(和生产运行逻辑保持一致)

如果需要测试场景和生产构建的逻辑完全对齐,可以配置Jest全局前置钩子,在测试启动前自动生成versioninfo文件:

  1. 新建jest-global-setup.js文件,写入生成逻辑:
const fs = require('fs');
const path = require('path');

module.exports = async () => {
  const distPath = path.resolve(__dirname, 'dist');
  if (!fs.existsSync(distPath)) fs.mkdirSync(distPath);
  const fileContent = `
export const VERSAO = "0.0.1 (dev)";
export const DESCRICAO = "";
  `.trim();
  fs.writeFileSync(path.resolve(distPath, 'versioninfo.ts'), fileContent);
}
  1. 在jest.config.js中注册钩子:
module.exports = {
  // 保留原有配置,新增如下字段
  globalSetup: '<rootDir>/jest-global-setup.js'
}

内容的提问来源于stack exchange,提问作者Pedro Papadópolis

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 03:33:00