У меня есть файл .ts
, который я хочу проверить.
frontend / game / index.ts
import App from '@/views/app';
let app = new App({
el: "#app",
});
export default app;
Файл, который я хочу импортировать в index.ts
, равен frontend/game/views/app.vue
.Webpack-dev-server, eslint и (я полагаю) ts-loader способны разрешить импорт модуля с псевдонимом @
, поскольку в моих этапах сборки или разработки ошибок нет.
Однако, когда я запускаю jest, я получаю следующую ошибку:
TypeScript diagnostics (customize using `[jest-config].globals.ts-jest.diagnostics` option):
frontend/game/index.ts:1:17 - error TS2307: Cannot find module '@/views/app'.
1 import App from '@/views/app';
~~~~~~~~~~~~~
Это относится к первой строке моего file.spec.js
файла:
frontend / tests / game / models / file.spec.js
import App from '@/views/app';
Я выполнил рекомендации документации по разрешению модуля машинописи, , а также статейв частности, о настройке проектов webpack / typescript / jest.
Их рекомендации, как правило, связаны с настройкой псевдонима в 3 местах:
- config webpack под
resolve.alias
.Шахта:
webpack.config.js
module.exports = {
entry: './frontend/game/index.ts',
output: {
filename: 'main.js',
path: path.resolve(__dirname, 'staticfiles')
},
resolve: {
extensions: [ '.ts', '.js', '.vue', '.scss', '.sass'],
alias: {
'vue$': 'vue/dist/vue.esm.js',
'@': path.resolve(__dirname, 'frontend/game/')
}
},
Jest Config, под
moduleNameMapper
.Мой:
package.json (где находится мой jest config)
"jest": {
"verbose": true,
"moduleFileExtensions": [
"js",
"json",
"vue",
"ts"
],
"moduleDirectories": [
"node_modules",
"<rootDir>/frontend/game"
],
"transform": {
".*\\.(vue)$": "vue-jest",
"^.+\\.js$": "<rootDir>/node_modules/babel-jest",
"^.+\\.ts$": "<rootDir>/node_modules/ts-jest"
},
"moduleNameMapper": {
"^@/(.*)$": "<rootDir>/frontend/game/$1",
"\\.(css|less|sass|scss)$": "<rootDir>/frontend/tests/styleMock.js",
"\\.(gif|ttf|eot|svg)$": "<rootDir>/frontend/tests/fileMock.js"
},
"transformIgnorePatterns": [
"/node_modules/(?!local-echo).+\\.js$"
]
},
Конфигурация Typescript, используя
baseUrl
в сочетании с
paths
.Мой:
tsconfig.json
{
"compilerOptions": {
"outDir": "./built/",
"sourceMap": true,
"strict": false,
"noImplicitReturns": true,
"module": "es2015",
"moduleResolution": "node",
"target": "es5",
"esModuleInterop": true,
"baseUrl": ".",
"paths": {
"@/*": ["frontend/game/*"]
}
},
"include": [
"./frontend/**/*"
]
}
Насколько я могу судить, я следовал инструкциям в точности так, как указано.После слежки за github и stackoverflow я не смог обнаружить, что я делаю неправильно, или есть ли какая-то ошибка прямо сейчас.Я экспериментировал с добавлением расширения .vue
в импорт, пробовал различные комбинации экспериментов с путями (т. Е. Удалял "внешний интерфейс" из объекта paths
, помещал и заменял косые черты до и после пути и т. Д.) И переключал настройки,как esModuleInterop
, безрезультатно.
Как я могу заставить Jest распознавать псевдонимы моего модуля?
EDIT: увлекательно, добавление //@ts-ignore
непосредственно перед оператором импорта приводит к тому, что эта ошибка "исчезает", "и Jest затем успешно импортирует файл.
EDIT2: шаг tsignore заставил меня с подозрением относиться к способности jest вообще импортировать файл .vue
, поэтому я исследовал, что в эта проблема на github , а также на машинописи рекомендации на .vue
файлах.Однако у меня уже есть файл vue-shims.d.ts
, идентичный их рекомендациям.Просто чтобы поэкспериментировать, я скопировал все приложение, но независимо от того, куда я его положил, эффекта не было.