Пути машинописного текста не разрешаются при запуске jest?
Попытка преобразовать этот проект в шутку, используя эти инструкции. У меня все работает, кроме файлов, которые используют paths
конфигурация:
"paths": {
"@fs/*": ["./src/*"],
"@test/*": ["./test/*"]
}
Похоже, что при выполнении тестов операторы импорта не разрешаются, и это записывается в журнал:
Cannot find module '@fs/container/validation/ValidationContext' from 'Core.spec.ts'
1 | import { ValidationOptions } from "@fs/container/validation/ValidationOptions";
> 2 | import { ValidationContext } from "@fs/container/validation/ValidationContext";
| ^
3 | import { ValidationContainer } from "@fs/container/validation/ValidationContainer";
4 |
5 | import { Core1 } from "@test/core/Core1";
at Resolver.resolveModule (node_modules/jest-resolve/build/index.js:221:17)
at Object.<anonymous> (test/core/Core.spec.ts:2:1)
Есть ли способ получить Jest/ TS-JEST включить @paths
при разрешении импорта?
4 ответа
jest не может учитывать отображение пути tsconfig, так как это время компилятора ts, поэтому в конфигурации jest должен быть соответствующий модуль modulenamemapper ( https://jestjs.io/docs/en/configuration.html) для разрешения альтернативных путей,
Я хотел разрешить пути к модулям, начиная с
~/
к моему
<baseUrl>/<moduleName>
.
Благодаря ссылке OJ Kwon я решил это (дайте ему точку).
tsconfig.json
см. документ о сопоставлении путей с разрешением модуля
{
"compilerOptions": {
"baseUrl": "src",
"paths": {
"~/*": ["*"]
}
},
}
Конфигурация шутки
Тогда нам нужно сказать
jest
чтобы разрешить пути тоже. Это делается со следующей конфигурацией:
"moduleNameMapper": {
"~/(.*)": "<rootDir>/src/$1"
},
Добавьте jest.config.js в корневую папку проекта с содержимым ниже.
const { pathsToModuleNameMapper } = require('ts-jest/utils')
const { compilerOptions } = require('./tsconfig')
module.exports = {
preset: 'ts-jest',
testEnvironment: 'node',
moduleNameMapper: pathsToModuleNameMapper(compilerOptions.paths),
modulePaths: [
'<rootDir>'
],
}
Ответ @FranSanchis действительно решил проблему для меня, я только что внес много изменений, чтобы соответствовать изменениям шутки 2023 года.
в jest.config.js
const { pathsToModuleNameMapper } = require('ts-jest');
const { compilerOptions } = require('./tsconfig');
module.exports = {
preset: 'ts-jest',
.
.
.
moduleNameMapper: pathsToModuleNameMapper(compilerOptions.paths),
modulePaths: ['<rootDir>'],
}
И в тсконфиге
"compilerOptions": {
"target": "es6",
"lib": ["dom", "dom.iterable", "esnext"],
"allowJs": true,
"skipLibCheck": true,
"strict": true,
"forceConsistentCasingInFileNames": true,
"noEmit": true,
"esModuleInterop": true,
"module": "esnext",
"moduleResolution": "node",
"resolveJsonModule": true,
"isolatedModules": true,
"jsx": "preserve",
"incremental": true,
"baseUrl": ".",
"paths": {
"@/*": ["src/*"]
}