В настоящее время Jest не проходит тесты, потому что не может найти модуль, вызываемый внутри компонента:
FAIL tests/Unit/VHeaderBar.spec.ts
● Test suite failed to run
Cannot find module '@@/public/assets/images/placeholder.png' from 'VHeaderBar.vue'
at Resolver.resolveModule (node_modules/jest-runtime/node_modules/jest-resolve/build/index.js:221:17)
at src/components/VHeaderBar.vue:687:18
at Object.<anonymous> (src/components/VHeaderBar.vue:749:3)
Случай
В NuxtJs знаки @@
относятся к корневому каталогу, потому что в конечном решении мы хотим хранить изображения в общей папке или папке хранения, которая находится в корне проэкт.
При запуске тестов jest проверяет папку src
, затем пытается смонтировать изображения, хранящиеся в корне, и не может их найти.
Я пробовал много разных способов решить эту проблему, но, похоже, не нашел решения. Вот краткий список того, что я уже пробовал:
- Изменение
regex
для проверки файлов изображений и перехода в нужную папку с помощью параметраmoduleNameMapper
в файле конфигурации Jest. - Я читал что-то в Stack об использовании «фиктивной» папки, которая экспортирует файлы изображений через javascript, но это не сработало.
- Используя параметр
modulePaths
в файле конфигурации Jest. - Создание псевдонима в
tsconfig.js
для папки assets и использование его вmoduleNameMapper
- Пробовал другой подход в компоненте VueJS и тестовом файле для загрузки ресурсов, что нарушило процесс компиляции (поэтому я вернул это).
Текущий файл конфигурации Jest
module.exports = {
moduleFileExtensions: [
"ts",
"tsx",
"vue",
"js",
"json"
],
watchman: false,
moduleNameMapper: {
"/\.(gif|jpg|jpeg|tiff|png)$/i": "<rootDir>/public/assets/images/$1",
"^@/(.*)$": "<rootDir>/src/$1",
"^~/(.*)$": "<rootDir>/src/$1",
"^~~/(.*)$": "<rootDir>/src/$1"
},
transform: {
// process js with `babel-jest`
"^.+\\.js$": "<rootDir>/node_modules/babel-jest",
// process `*.vue` files with `vue-jest`
".*\\.(vue)$": "<rootDir>/node_modules/vue-jest",
// process `*.ts` files with `ts-jest`
"^.+\\.(ts|tsx)$": "<rootDir>/node_modules/ts-jest",
},
snapshotSerializers: [
"<rootDir>/node_modules/jest-serializer-vue"
],
collectCoverage: true,
collectCoverageFrom: [
"<rootDir>/src/components/**/*.vue",
"<rootDir>/src/pages/**/*.vue",
"<rootDir>/src/layouts/**/*.vue"
],
testMatch: [
'**/tests/Unit/**/*.spec.(js|jsx|ts|tsx)|**/__tests__/*.(js|jsx|ts|tsx)'
],
}
Текущая структура папок (только папки, которые мы используем для теста)
project folder
- public
-- assets
--- **images**
- src
-- components
--- **mounted component** (works)
- tests
-- Unit
--- mountedComponent.spec.ts
Какие-либо предложения?
Исправить jest.config
?
Что-то не так с синтаксисом?
Мне нужно исправить tsconfig
?