Поддерживает ли Jest импорт/экспорт ES6?
Если я использую import/export
из ES6, то все мои тесты jest с ошибкой терпят неудачу:
Неожиданное зарезервированное слово
Я конвертирую свой объект под тест, чтобы использовать синтаксис старой школы IIFY, и внезапно мои тесты проходят. Или возьмите еще более простой тестовый пример:
var Validation = require('../src/components/validation/validation');//PASS
//import * as Validation from '../src/components/validation/validation'//FAIL
Те же ошибки. Очевидно, что здесь проблема с импортом/экспортом. Для меня нецелесообразно переписывать мой код с использованием синтаксиса ES5, чтобы сделать мою тестовую структуру счастливой.
У меня есть шутка. Я пробовал различные рекомендации из проблем github. Пока не заходите.
package.json
"scripts": {
"start": "webpack-dev-server",
"test": "jest"
},
"jest": {
"testPathDirs": [
"__tests__"
],
"testPathIgnorePatterns": [
"/node_modules/"
],
"testFileExtensions": ["es6", "js"],
"moduleFileExtensions": ["js", "json", "es6"]
},
babelrc
{
"presets": ["es2015", "react"],
"plugins": ["transform-decorators-legacy"]
}
Есть ли исправление для этого?
Ответы
Ответ 1
Из моего ответа на другой вопрос это может быть проще:
Единственное требование - настроить среду test
на Babel и добавить плагин преобразования es2015:
Шаг 1:
Добавьте свою среду test
в .babelrc
в корне вашего проекта:
{
"env": {
"test": {
"plugins": ["@babel/plugin-transform-modules-commonjs"]
}
}
}
Шаг 2:
Установите модуль преобразования es2015:
npm install --save-dev @babel/plugin-transform-modules-commonjs
И это все. Jest включит компиляцию из модулей ES в CommonJS автоматически, без необходимости сообщать дополнительные параметры вашему свойству jest
внутри package.json
.
Ответ 2
Это вопрос добавления stage-0 в ваш .babelrc файл. вот пример:
{
"presets": ["es2015", "react", "stage-0"],
"plugins": ["transform-decorators-legacy"]
}
Ответ 3
В дополнение к установке babel-jest
(который по умолчанию содержит шутки), обязательно установите regenerator-runtime
.
Ответ 4
Я решил это с помощью .default
.
Try
var Validation = require('../src/components/validation/validation').default;