Jest дает "Не удается найти модуль" при импорте компонентов с абсолютными путями
Получение следующей ошибки при запуске Jest
Cannot find module 'src/views/app' from 'index.jsx'
at Resolver.resolveModule (node_modules/jest-resolve/build/index.js:179:17)
at Object.<anonymous> (src/index.jsx:4:12)
index.jsx
import AppContainer from 'src/views/app';
package.json
"jest": {
"collectCoverageFrom": [
"src/**/*.{js,jsx,mjs}"
],
"setupFiles": [
"<rootDir>/config/polyfills.js"
],
"testMatch": [
"<rootDir>/src/**/__tests__/**/*.{js,jsx,mjs}",
"<rootDir>/src/**/?(*.)(spec|test).{js,jsx,mjs}"
],
"testEnvironment": "node",
"testURL": "http://localhost",
"transform": {
"^.+\\.(js|jsx|mjs)$": "<rootDir>/node_modules/babel-jest",
"^.+\\.css$": "<rootDir>/config/jest/cssTransform.js",
"^(?!.*\\.(js|jsx|mjs|css|json)$)": "<rootDir>/config/jest/fileTransform.js"
},
"transformIgnorePatterns": [
"[/\\\\]node_modules[/\\\\].+\\.(js|jsx|mjs)$"
],
"moduleDirectories": [
"node_modules",
"src"
],
"moduleNameMapper": {
"^react-native$": "react-native-web"
},
"moduleFileExtensions": [
"web.js",
"js",
"json",
"web.jsx",
"jsx",
"node",
"mjs"
]
},
Мои тесты, которые запускают файлы, содержащие только относительные пути в дереве, работают правильно.
Чтобы уточнить, я ищу, как настроить Jest, чтобы не сбой по абсолютным путям.
Ответы
Ответ 1
Так как в package.json
вас есть:
"moduleDirectories": [
"node_modules",
"src"
]
Это говорит о том, что каждый импортируемый вами модуль будет сначала просматриваться в node_modules
а если он не найден, будет просматриваться в каталоге src
.
Поскольку он смотрит в каталог src
вы должны использовать:
import AppContainer from 'views/app';
Обратите внимание, что этот путь является абсолютным для каталога src
, вам не нужно перемещаться, чтобы найти его как относительный путь.
ИЛИ вы можете настроить корневой каталог в moduleDirectories внутри вашего pakcage.json, чтобы все ваши компоненты могли быть импортированы так, как вы этого хотите.
Ответ 2
Я думаю, что вы ищете: корни или modulePaths и moduleDirectories
Вы можете добавить как относительные, так и абсолютные пути.
Я бы обязательно включил <rootDir>
в массив <rootDir>
, <rootDir>
в массив node_modules
и node_modules
в массив moduleDirectories, если у вас нет веских причин для их исключения.
"jest": {
"roots": [
"<rootDir>",
"/home/some/path/"
],
"modulePaths": [
"<rootDir>",
"/home/some/other/path"
],
"moduleDirectories": [
"node_modules"
],
}