angular 项目升级 jest 与 jest-preset-angular 之后,更新了 jest.config.ts
import ngPreset from 'jest-preset-angular/presets';
import { type JestConfigWithTsJest, pathsToModuleNameMapper } from 'ts-jest';
import tsconfig from './tsconfig.json';
const esmPreset = ngPreset.createEsmPreset();
export default {
...esmPreset,
testMatch: ['<rootDir>/src/**/*.spec.ts'],
moduleNameMapper: {
...esmPreset.moduleNameMapper,
...pathsToModuleNameMapper(tsconfig.compilerOptions.paths, { prefix: '<rootDir>' }),
rxjs: '<rootDir>/node_modules/rxjs/dist/bundles/rxjs.umd.js',
},
setupFilesAfterEnv: ['<rootDir>/setup-jest.ts'],
transform: {
'^.+\\.(ts|js|html|svg)$': [
'jest-preset-angular',
{
tsconfig: '<rootDir>/tsconfig.spec.json',
stringifyContentPathRegex: '\\.(html|svg)$',
useESM: true,
},
],
},
} satisfies JestConfigWithTsJest;
运行测试时报错
FAIL src/app/models/post-template.spec.ts
● Test suite failed to run
Cannot find module 'src/app/models/post-template' from 'src/app/models/post-template.spec.ts'
at Resolver._throwModNotFoundError (node_modules/jest-resolve/build/resolver.js:427:11)
对应的测试代码 post-template.spec.ts 中报错的地方
import { PostTemplate } from 'src/app/models/post-template';
在 jest.config.ts 中添加下面的配置解决了
modulePaths: ['<rootDir>']