Jest+Nestjs+Supertest测试报错:无法找到src/service模块
解决Jest全局初始化时找不到
src/service模块的问题 问题背景
运行Jest测试时出现以下错误:
Error: Jest: Got error running globalSetup -
reason: Cannot find module src/service
项目结构为:
- src
- qa
qa目录下的Jest配置尝试了多种moduleNameMapper规则,但均无效;将导入语句改为相对路径../service可正常运行,但开发人员拒绝修改路径。
核心原因
- 当前
moduleNameMapper配置规则错误,未正确映射src/开头的模块路径 - Jest的
globalSetup/globalTeardown文件在模块系统初始化阶段执行,常规路径映射可能未生效 - TypeScript的
baseUrl配置(src目录下的./)与Jest的rootDir(项目根目录)未对齐
解决方案
方案1:修正moduleNameMapper并规范路径配置
修改qa目录下的Jest配置文件,调整以下内容:
import { InitialOptions } from '@jest/types/build/Config'; const config: InitialOptions = { verbose: true, preset: 'ts-jest', testEnvironment: 'node', moduleFileExtensions: ['js', 'json', 'ts'], rootDir: '../', // 使用<rootDir>变量指定全局文件路径,避免相对路径歧义 globalSetup: '<rootDir>/qa/global-setup.ts', globalTeardown: '<rootDir>/qa/global-teardown.ts', testRunner: 'jest-jasmine2', testRegex: '.*-spec.ts$', transform: { '^.+\\.ts$': 'ts-jest', }, setupFilesAfterEnv: ['jest-allure/dist/setup'], testTimeout: 40 * 1000, // 修正moduleNameMapper,正确映射src开头的模块 moduleNameMapper: { '^src/(.*)$': '<rootDir>/src/$1', }, transformIgnorePatterns: ['/node_modules/'], }; export default config;
方案2:在global-setup.ts手动添加模块搜索路径
如果方案1无效,可在global-setup.ts最顶部添加代码,将src目录加入Node的模块搜索路径:
import path from 'path'; import { fileURLToPath } from 'url'; // 适配ES模块的路径解析 const __filename = fileURLToPath(import.meta.url); const __dirname = path.dirname(__filename); // 将项目根目录下的src目录加入模块搜索列表 require('module').paths.push(path.resolve(__dirname, '../src')); // 后续的导入语句 import { Service } from 'src/service';
方案3:对齐TypeScript与Jest的模块路径配置
在Jest配置中添加modulePaths,与TypeScript的baseUrl效果对齐:
const config: InitialOptions = { // ...其他配置 modulePaths: ['<rootDir>/src'], };
验证步骤
- 保存所有配置修改
- 重新执行测试命令
- 检查是否仍存在模块找不到的错误
内容的提问来源于stack exchange,提问作者Halina
相关产品推荐
相关产品推荐

