Добрый день. Мне нужно проверить интерфейс vue. js на основе компонентов. vue. Сам проект с пользовательским интерфейсом лежит отдельно от проекта с тестами для него, и он написан на Typescript, а также проект с тестами.
В конфигурации веб-пакета используется vue / dist / vue .esm. Модуль js, который позволяет использовать методы Vue .extend, Vue .use и т. Д.
Тестовый проект настроен на комбинацию vue -test-utils и jest, и когда я пытаюсь использовать тот же vue импорт, я получаю сообщение об ошибке типа
export default Vue;
^^^^^^
SyntaxError: Unexpected token 'export'
То же самое и с ситуацией импорта.
Вот простой пример базовых компонентов c для машинописного текста:
<template>
<div>
</div>
</template>
<script lang="ts">
import Vue from 'vue'
export default Vue.extend({
data: () => ({
...
})
})
</script>
И вот пример простого теста для него:
import { mount } from '@vue/test-utils'
import Example from '@components/Example.vue';
describe('example', () => {
it('should be rendered', () => {
const wrapper = mount(Example);
expect(wrapper.isVueInstance()).toBeTruthy();
})
})
Во время выполнения теста я получаю сообщение, которое вы видели раньше:
path\to\my\project\node_modules\vue\dist\vue.esm.js:11993
export default Vue;
^^^^^^
SyntaxError: Unexpected token 'export'
at Runtime.createScriptFromCode (node_modules/jest-runtime/build/index.js:1085:14)
at Object.<anonymous> (node_modules/@vue/test-utils/dist/vue-test-utils.js:7:27)
tsconfig. json
{
"compilerOptions": {
"sourceMap": true,
"noImplicitAny": false,
"module": "commonjs",
"target": "es6",
"baseUrl": ".",
"allowJs": true,
"lib": [
"es2015",
"es2017",
"dom",
"es2018.promise"
],
"paths": {
"@components/*": ["../path/to/Components/*"],
"vue$": ["vue/dist/vue.esm.js"]
},
"removeComments": true
},
"compileOnSave": false,
"exclude": [ "node_modules" ]
}
jest.config. js:
module.exports = {
verbose: true,
testRegex: ".+[.]test[.](ts|js)$",
moduleNameMapper: {
"^@components/(.*)$": "<rootDir>/../path/to/Components/$1",
"vue$": 'vue/dist/vue.esm.js'
},
moduleFileExtensions: [
"ts", "js", "json", "vue"
],
transform: {
"^.+\\tsx?$": "ts-jest",
"^.+\\.jsx?$": "babel-jest",
"^.+\\.js$": "babel-jest",
".*\\.(vue)$": "vue-jest"
},
preset: 'ts-jest/presets/js-with-ts',
transformIgnorePatterns: [
'node_modules/(?!(@babel)/)',
"/node_modules/(?!(bootstrap-vue)/)",
"/node_modules/(?!vue)"
],
testURL: "http://localhost/"
}
часть webpack.config. js в основном UI проекта:
module: {
rules: [
{
test: /\.vue$/,
loader: 'vue-loader'
},
{
test: /\.tsx?$/,
exclude: /node_modules/,
use: [
{ loader: 'babel-loader' },
{ loader: 'ts-loader', options: { appendTsSuffixTo: [/\.vue$/] } },
]
},
{
test: /\.js$/,
exclude: /node_modules/,
loader:"babel-loader"
},
{
test: /\.css$/,
use: [
'vue-style-loader',
'css-loader'
]
},
{
test: /\.less$/,
use: [
'vue-style-loader',
'css-loader',
'less-loader'
]
}
]
},
resolve: {
extensions: ['.ts', '.js', '.vue'],
alias: {
'vue$': 'vue/dist/vue.esm.js',
'@components': path.resolve('path/to/components')
}
},
plugins: [
new VueLoaderPlugin()
]
и вот .babelr c для добавления:
{
"presets": [
[
"@babel/preset-env",
{
"targets": {
"browsers": ["> 1%", "last 2 versions", "ie >= 10"]
},
"corejs": 3,
"modules" : "commonjs"
}
]
]
}
Если я изменить Vue / Dist / vue .esm. js на Vue / расстояние / vue . js, я должен изменить все Vue .extend для экспорта по умолчанию Vue и Vue .use () для mixins: [Mixin], что сложно тестировать. + я не смогу использовать 'new Vue'.
Кто-то знает, как правильно включить модуль ES6 vue npm (vue .esm. js) в тестирование ts проект? Пожалуйста,
PS В тестовом проекте нет веб-пакета.