javascript - ts-jest kan inte lösa tsconfig-alias
Jag har ett TypeScript-projekt och jag har ställt in alias i ts.config.json
{
"compilerOptions": {
"paths": {
"@pkg/*": ["./packages/*"],
},
}
}
i mina ts-filer kan jag förkorta mina importvägar
// example.ts
import {someThing} from '@pkg/mypackage'
det fungerar bra med tsc och vscode kan känna igen aliasvägen korrekt, men när jag kör npm t som kör jest misslyckas det
Cannot find module '@pkg/mypackage' from 'example.ts'
jest.config.js
module.exports = {
preset: "ts-jest",
testEnvironment: "node",
transform: {
"^.+\\.tsx?$": "ts-jest",
},
};
Jag lade till detta i min package.json-fil
"jest": {
"moduleNameMapper": {
"@pkg/(.*)": "<rootDir>/packages/$1"
}
}
Jag lyckades använda pathsToModuleNameMapper, men jag hade detta problem https://github.com/kulshekhar/ts-jest/issues/2709
Svar #1
Jag hade samma problem, men lyckades få det att fungera genom att använda ett par plugins. Jag har också några extra matchers i slutet för några ytterligare testtyper.
Min Jest-base.config.js har tsconfig-paths-jest-pluginet installerat och igång. Detta plugin löste mina tsconfig-vägproblem.
Jag använder en vanlig basfil för gemensam konfiguration mellan enhetstester och end-to-end-tester, som jag båda kör via Jest för närvarande.
jest-bas-konfig.ts
const tsconfig = require('./tsconfig.json');
const moduleNameMapper = require('tsconfig-paths-jest')(tsconfig);
module.exports = {
moduleNameMapper,
preset: 'ts-jest',
testEnvironment: 'node',
rootDir: './',
collectCoverage: true,
collectCoverageFrom: [
'<rootDir>/**/*.ts',
'!<rootDir>/**/*.interface.ts',
'!<rootDir>/**/*.mock.ts',
'!<rootDir>/**/*.module.ts',
'!<rootDir>/**/__mock__/*',
'!<rootDir>/src/main.ts'
],
coverageProvider: 'v8',
coverageReporters: [
'clover',
'json',
'lcov',
'text',
'text-summary'
],
resetModules: true,
setupFiles: [
'dotenv/config'
],
// Add the community jest-extended matchers
setupFilesAfterEnv: [
'jest-extended'
],
verbose: false
};
Min jest.config.js (för enhetstester) kommer att utöka min jest-base.config.js för att lägga till enhetstest-specifik kod såsom krav på täckning, var output för täckning ska lagras osv.
jest.config.js
const JestBaseConfiguration = require('./jest-base.config');
module.exports = Object.assign(JestBaseConfiguration, {
moduleFileExtensions: ['js', 'json', 'ts'],
testRegex: '.e2e-spec.ts$',
transform: {
'^.+\\.(t|j)s$': 'ts-jest'
},
...
Svar #2
Jag löste detta problem genom att lägga till en moduleNameMapper-egenskap i filen jest.config.ts.
ts.config.json:
"paths": {
"@/*": ["src/*"],
"@": ["src/index.ts"]
},
jest.config.json:
import type { Config } from "jest";
const config: Config = {
preset: "ts-jest",
testEnvironment: "node",
moduleNameMapper: {
"@/(.*)": "<rootDir>/src/$1",
},
};
export default config;
