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

Jest中如何实现类似TypeScript rootDirs的跨根目录相对导入功能

Jest 没有直接对标 TypeScript rootDirs 的开箱即用配置,但可以通过组合配置实现完全一致的效果。

你尝试的roots配置和TS的rootDirs功能完全不匹配,它仅用于指定Jest搜索测试文件的目录范围,不负责模块导入路径解析,因此无法解决问题。

可通过以下两种方案实现需求:

方案1:手动配置moduleNameMapper(适合简单场景)

直接在Jest配置文件中添加模块映射规则,Jest匹配导入路径时会按顺序查找数组中的目录:

// jest.config.js
module.exports = {
  preset: 'ts-jest',
  testEnvironment: 'node',
  moduleNameMapper: {
    '^\\./(.*)$': ['<rootDir>/src/main/$1', '<rootDir>/src/test/$1']
  }
}

方案2:复用tsconfig配置(适合复杂场景,避免重复维护)

  1. 先在tsconfig.json的compilerOptions中添加paths配置,和你的rootDirs对应:
{
    "compilerOptions": {
        "rootDirs": [
            "src/main",
            "src/test"
        ],
        "paths": {
            "*": ["src/main/*", "src/test/*"]
        },
        "moduleResolution": "node"
    }
}
  1. 修改Jest配置,用ts-jest提供的工具函数直接把tsconfig的paths转换为Jest可识别的映射规则:
// jest.config.js
const { pathsToModuleNameMapper } = require('ts-jest')
const { compilerOptions } = require('./tsconfig.json')

module.exports = {
  preset: 'ts-jest',
  testEnvironment: 'node',
  moduleNameMapper: pathsToModuleNameMapper(compilerOptions.paths, {
    prefix: '<rootDir>/'
  })
}

内容的提问来源于stack exchange,提问作者oal

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 20:36:01