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

如何在Nx Jest中配置自定义路径导入?

解决Expo + Jest单元测试中自定义路径别名映射失效问题

以下是针对这类问题的常见排查和解决步骤,亲测有效:

  • 确保Jest的moduleNameMapper正则与tsconfig完全匹配
    手动配置映射时,必须用正则锚点(^和$)锁定路径开头和结尾,同时对应tsconfig的baseUrl路径。比如tsconfig里"@/*": ["src/*"],Jest里要写:

    moduleNameMapper: {
      "^@/(.*)$": "<rootDir>/src/$1",
      "^@assets/(.*)$": "<rootDir>/assets/$1"
    }
    

    注意<rootDir>对应项目根目录,必须和tsconfig的baseUrl: "./"保持一致。

  • 用ts-jest自动同步路径映射(推荐)
    手动写正则容易出错,直接用ts-jest提供的pathsToModuleNameMapper函数,一键同步tsconfig的paths配置:

    1. 先安装依赖(如果没装):npm install ts-jest --save-dev
    2. 在jest.config.ts中配置:
      import type { Config } from 'jest';
      import { pathsToModuleNameMapper } from 'ts-jest';
      import { compilerOptions } from './tsconfig.json';
      
      const config: Config = {
        preset: '@expo/jest-presets',
        moduleFileExtensions: ['ts', 'tsx', 'js', 'jsx', 'json'],
        // 自动映射tsconfig的paths
        moduleNameMapper: pathsToModuleNameMapper(compilerOptions.paths, {
          prefix: '<rootDir>/',
        }),
        transform: {
          '^.+\\.(ts|tsx)$': 'ts-jest',
        },
      };
      
      export default config;
      
  • 检查依赖版本兼容性
    Expo的Jest预设(@expo/jest-presets)和ts-jest、Jest版本必须匹配:

    • Expo 49+对应Jest 29.x,ts-jest也要用29.x版本
    • 可以查看package.json里的版本,不匹配就升级/降级到兼容版本
  • 清除Jest缓存
    缓存会导致配置不生效,执行命令:

    npx jest --clearCache
    

    之后再重新运行测试。

  • 确认moduleFileExtensions配置
    确保Jest能识别TypeScript文件扩展名,在jest.config.ts中添加:

    moduleFileExtensions: ['ts', 'tsx', 'js', 'jsx', 'json', 'node']
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 21:32:45