#vue.js #jestjs #vuejs3 #babel-jest
Вопрос:
Я использую Jest в качестве тестового запуска в проекте Vue 3, в котором используется плагин @vueform slider:
https://github.com/vueform/slider
код в @vueform/slider/dist/slider.js:1 выдает ошибку «Синтаксическая ошибка: невозможно использовать оператор импорта вне модуля».
Я попытался добавить запись «transformIgnorePatterns» в конфигурацию шутки package.json:
"jest": {
"testEnvironment": "jsdom",
"moduleFileExtensions": [
"js",
"json",
"vue"
],
"transform": {
"^. \.(js|jsx)$": "babel-jest",
"^. \.(vue)$": "vue3-jest"
},
"transformIgnorePatterns": ["/node_modules/(?!@vueform/slider/)", "node_modules/(?!@vueform/)"]
}
Я также добавил «тип»: «модуль» в package.json
И попытался измениться
import SliderPrice from "@vueform/slider"
Для
const SliderPrice = require("@vueform/slider")
Все еще получаю ту же ошибку!
Есть идеи, как я могу решить эту проблему? Я не могу ничего проверить с помощью Jest, пока эта ошибка не будет устранена.
Редактировать:
Я забыл добавить это: Изначально сведения об ошибке включали все (сведенные к минимуму) slider.js файл. После добавления «тип»: «модуль» в package.json теперь подробности включают только эту строку:
({"Object.<anonymous>":function(module,exports,require,__dirname,__filename,jest){import { toRefs as t, ref as e, computed as r, reactive as n, onMounted as i, onUnmounted as o, watch as a, openBlock as s, createBlock as l, mergeProps as u } from "vue";
Правка 2:
Моя конфигурация babel находится в файле .babelrc:
{
"presets": ["@babel/preset-env"]
}
- Vue-это настройка внешнего интерфейса в приложении Laravel, но webpack.mix.js файл конфигурации не использует babel.
Правка 3:
После еще нескольких часов игры с настройками я считаю, что это связано с Babel: если я удалю свой файл .babelrc, я начну получать ошибку «Ошибка синтаксиса: Невозможно использовать инструкцию импорта вне модуля» для моих собственных файлов .vue. Это показывает, что с помощью файла .babelrc мои файлы javascript ES6 преобразуются в ES5.
Таким образом, плагины Vue, такие как @vueform/slider/, НЕ преобразуются Babel в ES5, хотя правильный путь определен в «transformIgnorePatterns».
Комментарии:
1. Возможно, это не решение, но я думаю, что это то, что стоит попробовать. Ваше использование
transformIgnorePatterns
кажется опасным. Прочитайте эту часть Jest docs :transformIgnorePatterns
исключит файл из преобразования, если путь совпадает с любым предоставленным шаблоном. Поэтому разделение на несколько шаблонов может привести к непредвиденным результатам, если вы не будете осторожны.2. Я знаю, что комментарии не должны использоваться для этого, но вы нашли решение? В настоящее время у меня та же проблема
3. @Николь, я оставил его на несколько дней, а затем вернулся свежим, чтобы попробовать еще раз. Я считаю, что я определил корень проблемы, хотя я еще не нашел решения. Я обновлю эту тему к завтрашнему дню, надеюсь, найду решение. Не волнуйтесь, очень скоро все так или иначе уладится 🙂
Ответ №1:
Для vue3 и 2 (я не тестировал его на 2, но должен работать)
npm i -D @babel/preset-env babel-jest
babel.config.js
{
"presets": ["@babel/preset-env"]
}
У меня также были проблемы с файлами vue. Ниже моя конфигурация работает нормально.
npm i -D @vue/vue3-jest # or 2 if you are on second version
jest.config.js
export default {
testEnvironment: 'jsdom',
transform: {
'^. \.[t|j]sx?
: 'babel-jest',
'^. \.vue
: '@vue/vue3-jest',
},
}