Skip to main content
Version: Next

Paths mapping

If you use "baseUrl" and "paths" options in your tsconfig file, you should make sure the "moduleNameMapper" option in your Jest config is setup accordingly.

ts-jest provides a helper to transform the mapping from tsconfig to Jest config format, but it needs the .js version of the config file.

Example

TypeScript config

With the below config in your tsconfig:

// tsconfig.json
{
"compilerOptions": {
"baseUrl": ".",
"paths": {
"@App/*": ["src/*"],
"lib/*": ["common/*"]
}
}
}

Jest config (without helper)

// jest.config.js
/** @type {import('ts-jest').JestConfigWithTsJest} */
module.exports = {
// [...]
moduleNameMapper: {
'^@App/(.*)$': '<rootDir>/src/$1',
'^lib/(.*)$': '<rootDir>/common/$1',
},
}

Jest config (with helper)

// jest.config.js
const { pathsToModuleNameMapper } = require('ts-jest')
// In the following statement, replace `./tsconfig` with the path to your `tsconfig` file
// which contains the path mapping (ie the `compilerOptions.paths` option):
const { compilerOptions } = require('./tsconfig')

/** @type {import('ts-jest').JestConfigWithTsJest} */
module.exports = {
// [...]
roots: ['<rootDir>'],
modulePaths: [compilerOptions.baseUrl], // <-- This will be set to 'baseUrl' value
moduleNameMapper: pathsToModuleNameMapper(compilerOptions.paths /*, { prefix: '<rootDir>/' } */),
}

With extra options as 2nd argument:

  • prefix: append prefix to each of mapped config in the result
  • useESM: when using type: module in package.json, TypeScript enforces users to have explicit js extension when importing a ts file. This option is to help pathsToModuleNameMapper to create a config to suit with this scenario.

If using globalSetup or globalTeardown

Files used for globalSetup or globalTeardown are not directly processes by jest, so those do not use the "moduleNameMapper" mapping. So you have to make sure those are able to map the paths themselves.

Global setup file with tsconfig-paths

For those files to be able to use tsconfig-paths, you have to import it directly

// ./path/to/globalSetup.js
require('tsconfig-paths/register')

/**
* Your global setup
*/

// ./path/to/globalTeardown.js
require('tsconfig-paths/register')

/**
* Your global teardown
*/