-
Notifications
You must be signed in to change notification settings - Fork 455
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
moduleNameMapper doesn't work for me #364
Comments
Can you please create a minimal repo that reproduces this issue? |
i hope u can understand the problem and reproduce the issue or the misconfig Thanks for ur help |
Changing the
Hope this helps |
This should not have been closed. There is an opportunity to automate this so that developer does not have to touch jest.config. |
@DmitryEfimenko if you are using webpack, you'd face the same issue where some path mapped in typescript thanks to the The option |
whatever it does, it seems that all we need to do to make jest work is to put corresponding mappings in the jest.config. I'm not talking about webpack. Just jest and what would it take to make it work. |
I understand, and I thought it'd be nice to have, until I had a project where some path mapping in jest were different. For example you'd expect it to not resolve during testing, while you still need to keep the paths for compiling. IF this has to be added, it must be an opt-in. |
I'd think it's a rare case when you would not want it.
|
yup @DmitryEfimenko that is what I meant by being an opt-in. Example of where you would not want it: // tsconfig.json:
"paths": {
"app": ["./src/app"],
"common/*": ["../src/common/*"],
"quasar": ["./node_modules/quasar-framework/dist/quasar.mat.esm.js"]
}
// jest.config.js:
moduleNameMapper: {
'^app$': '<rootDir>/src/app',
} And that is not the only project I work on where both don't match ;-) But yeah, having an option for it is a good idea. It could be a helper so that people can customize it: // jest.config.js
const { pathsToModuleNameMapper } = require('ts-jest')
const { compilerOptions: { paths: tsconfigPaths } } = require('./tsconfig')
module.exports = {
// ...
moduleNameMapper: {
...pathsToModuleNameMapper(
tsconfigPaths, // picking/omitting could happen here
// options could be given here
),
'someOtherMapping/(.*)': 'path/to/somewhere/else/$1',
}
} |
awesome, thanks! |
Anyone test this on windows? I can't seem to get this to work for windows. |
I have this problem that should be related to this issue. When I call a module "util" that links to
And throws:
But when I rename the folder and the module to "utils", in plural... It works.
🤷♂️🙄 |
@mrjdavidfg Observed the same exact phenomenon. Renaming the folder |
Hi there! I'm experiencing the warning Having multiple path mapping for a pattern is supported by typescript (see https://www.typescriptlang.org/docs/handbook/module-resolution.html#path-mapping). Is there a reason we can't do that here? |
@apflieger It looks like the issue with See #1072 |
@huafu and @apflieger :I have modules in node_modules folder and those dependancies are like below and use it like: import { NxDatepickerComponent } from '@xyz/ngx-ndbx/datefield/xyz-ngx-ndbx-datefield'; For this I have moduleNameMapper as having followings for jest configuaration in package.json file: "moduleNameMapper": { |
I'm struggling with this as well. I'm using an nrwl/nx workspace, the paths in tsconfig.app allow the app to run fine, I put the module name mappings in jest.config, nothing. I've tried using the jest utils that do the path to module mappings from tsconfig.app prefixed with rootDir, explicitly putting the entries (so not pulling them in from tsconfig.app), and a hundred other things. Nothing works. You run the tests and any module mapped to a path is not found. The one and only solution I have that works is just to remove the paths and start typing '../../../..' everywhere (which would be dozens of imports). |
@tcoz I've found the same thing. Tried suggestions from a dozen or so threads/posts/issues, and nothing works, including the |
path mapping works depending on your |
🤦 In my many stabs-in-the-dark, I'd changed that line to
|
I almost gave up on this but finally fixed it.
The key below was that // jest.config.js
const { pathsToModuleNameMapper } = require('ts-jest/utils')
const { compilerOptions } = require('./tsconfig')
module.exports = {
roots: ['<rootDir>'],
modulePaths: ['<rootDir>'],
moduleNameMapper: pathsToModuleNameMapper(compilerOptions.paths),
} |
Wish this was automated 🙈 🤦 |
I have a situation where it works locally, but not in GitHub CI. I have no idea why, tried the various solutions listed here, none worked. 🤔 |
Ran into what I thought was this issue, but it was just a case of not providing regex boundaries ( |
If you're using a different baseUrl in your tsconfig.json, you should set modulePaths to that baseUrl. // tsconfig.json
{
"compilerOptions": {
"baseUrl": "./src",
"paths": {
...
}
}
} // jest.config.js
const { pathsToModuleNameMapper } = require('ts-jest/utils')
const { compilerOptions } = require('./tsconfig')
module.exports = {
roots: ['<rootDir>'],
modulePaths: [compilerOptions.baseUrl], // <-- This will be set to './src'
moduleNameMapper: pathsToModuleNameMapper(compilerOptions.paths),
} |
If you are like me and none of the above solutions work for you, and you have |
none of the above solutions worked for me others (but they certainly helped), however this is what got me working, and it may help others... https://stackoverflow.com/a/73038898/2490091 |
I have a new problem my tsconfig.json is configured with "baseUrl": "./",
"paths": {
"*": ["./src/*"]
}, when I use in Jest.config.ts import type { Config } from 'jest';
import { pathsToModuleNameMapper } from 'ts-jest';
import { compilerOptions } from './tsconfig.json';
const config: Config = {
// Resto das configurações...
moduleNameMapper: pathsToModuleNameMapper(compilerOptions.paths, { prefix: '<rootDir>/' }),
};
export default config; raises a exception: Configuration error:
Could not locate module mapped as:
/Users/jonathanccalixto/Workspace/github/jonathanccalixto/maallaqa-monorepo/backend/src/$1.
Please check your configuration for these entries:
{
"moduleNameMapper": {
"/^(.*)$/": "/Users/jonathanccalixto/Workspace/github/jonathanccalixto/maallaqa-monorepo/backend/src/$1"
},
"resolver": undefined
} how do I resolve this? My dependencies: "dependencies": {
"fastify": "^4.13.0",
"reflect-metadata": "^0.1.13",
"semaphore-async-await": "^1.5.1",
"tsyringe": "^4.7.0",
"uuid": "^9.0.0"
},
"devDependencies": {
"@types/jest": "^29.5.2",
"@types/node": "^20.4.1",
"@types/uuid": "^9.0.1",
"@yanotec/eslint-config-node": "^1.0.7",
"eslint": "^8.35.0",
"eslint-plugin-prettier": "^5.0.0-alpha.1",
"jest": "^29.6.1",
"ts-jest": "^29.1.1",
"ts-node": "^10.9.1",
"tsx": "^3.12.3",
"typescript": "^5.1.6"
} |
@jonathanccalixto did u resolve your ussue? |
@jonathanccalixto @aliaksandrIt I'm not sure if we had the exact same problem, but I had a similar problem and solved it. Make sure that your paths in For example, this configuration... // tsconfig.json
{
"compilerOptions": {
"baseUrl": ".",
"paths": {
"@/*": ["./src/*"]
// ^ notice the "./"
},
} ...should become the following. // tsconfig.json
{
"compilerOptions": {
"baseUrl": ".",
"paths": {
"@/*": ["src/*"]
// ^ notice the lack of "./"
},
} This was really frustrating because I couldn't find any documentation that pointed this out. |
If you're using a monorepo like I was, where the local
import { pathsToModuleNameMapper } from 'ts-jest';
import { compilerOptions } from '../../../../../tsconfig.json';
module.exports = {
transform: {},
preset: 'ts-jest',
testEnvironment: 'node',
testMatch: [
"**/tests/**/*test.[tj]s"
],
moduleNameMapper: pathsToModuleNameMapper(compilerOptions.paths, {prefix: "<rootDir/>/../../../../../"})
}; |
Please keep in mind that |
Yes I agree, this is verging on a Jest bug/feat. In the docs, it still says |
Oh right, we are working on documentation these days. PR is welcome 👍 |
I change the path configuration in my tsconfig, for better paths. But now i cannot execute my testcases. So i checked the following documentaries:
jest
ts-jest
Is that an error or a misconfiguration? By Error i will do a small repo.
Snippet
tsconfig.json
Snippet
package.json
ERROR
The text was updated successfully, but these errors were encountered: