Jest не анализирует es6: SyntaxError: неожиданный импорт токена - PullRequest
0 голосов
/ 31 января 2019

Я пытаюсь настроить Jest с моим проектом webpack.Когда я запускаю свои тесты, Jest жалуется, что не может прочитать код es6.Бабель, похоже, не преобразовывает мои тестовые файлы.

Я пробовал различные решения, которые нашел в Интернете, но я все еще в тупике.Может быть, кто-то с большим знанием Babel / Webpack может взглянуть на мою конфигурацию и помочь мне.

соответствующий скрипт package.json:

{
    "test": "jest --no-cache --config config/jest.config.js"
}

соответствующий файл package.json:

"@babel/core": "^7.2.2",
"@babel/plugin-proposal-class-properties": "^7.3.0",
"@babel/preset-env": "^7.3.1",
"@babel/preset-flow": "^7.0.0",
"@babel/preset-react": "^7.0.0",
"babel-eslint": "^10.0.1",
"babel-jest": "^24.0.0",
"babel-loader": "^8.0.5",
"babel-plugin-styled-components": "^1.10.0",
"jest": "^24.0.0",
"webpack": "^4.29.0",
"webpack-cli": "^3.2.1",
"webpack-dev-server": "^3.1.14"

config / webpack.config.js:

entry: './src/index.js',
mode: isProduction ? 'production' : 'development',
devtool: isProduction ? 'none' : 'inline-source-map',
bail: true,
devServer: {
  contentBase: 'build',
  compress: true,
  port: 3000,
},
output: {
  path: path.resolve(__dirname, 'build'),
  filename: '[name].[chunkhash].js',
},
module: {
  rules: [
    {
      test: /\.js$/,
      exclude: /node_modules/,
      use: {
        loader: 'babel-loader',
        options: {
          cacheDirectory: true,
          presets: [
            '@babel/preset-env',
            '@babel/preset-react',
            '@babel/preset-flow',
          ],
          plugins: [
            'babel-plugin-styled-components',
            '@babel/plugin-proposal-class-properties',
          ],
        },
      },
    },
  ],
},
plugins: [
  new HtmlWebpackPlugin({
    template: 'src/index.html',
  }),
  new webpack.DefinePlugin({
    'process.env': JSON.stringify(process.env),
  }),
],

config / jest.config.js

module.exports = {
  verbose: true,
  rootDir: '../',
  setupFiles: ['./config/jest.setup.js'],
  transform: {
    '^.+\\.js?$': 'babel-jest',
  },

config / jest.setup.js

import Enzyme from 'enzyme';
import Adapter from 'enzyme-adapter-react-16';

Enzyme.configure({ adapter: new Adapter() });

jest error: ● Не удалось запустить комплект тестов

Jest encountered an unexpected token

This usually means that you are trying to import a file which Jest cannot parse, e.g. it's not plain JavaScript.

...

Details:

/<...projectpath>/config/jest.setup.js:1
({"Object.<anonymous>":function(module,exports,require,__dirname,__filename,global,jest){import Enzyme from 'enzyme';
                                                                                         ^^^^^^

SyntaxError: Unexpected token import

Мне нужен работающий тестовый бегун!Я предполагаю, что мое преобразование: babel-jest ничего не делает в моем jest.config.js ...

1 Ответ

0 голосов
/ 31 января 2019

Вам нужно сделать две вещи:

  1. Создать файл конфигурации Babel (babel.config.js):

    Это необходимо, потому что babel-jest опирается на традиционный конфигурационный файл Babel, а не на веб-пакет.Начиная с версии 7 Babel поддерживает JS-конфигурации как babel.config.js.

    При использовании конфигурации JS Babel (например, в отличие от .babelrc) Jest также компилирует модули в node_modules.AFAIK по договоренности, это должно быть в корне вашего проекта, вместе с файлом конфигурации jest.

    Вот конфигурация, основанная на опциях Babel в вашем файле webpack.config.js:

    // babel.config.js
    module.exports = {
      presets: [
        '@babel/preset-env',
        '@babel/preset-react',
        '@babel/preset-flow',
      ],
      plugins: [
        'babel-plugin-styled-components',
        '@babel/plugin-proposal-class-properties',
      ]
    }
    
  2. Установите версию моста babel-core:

    npm install babel-core@7.0.0-bridge.0 --save-dev
    

    С github.com / babel / babel-bridge :

    В этом репозитории содержится то, что мы называем пакетом «bridge», предназначенным для облегчения перехода для библиотек, использующих «babel-core» в качестве зависимости от равноправных узлов для Babel 6.

    Проблемас переходом Babel 7 на области видимости то, что если пакет зависит от Babel 6, они могут захотеть добавить поддержку Babel 7 наряду с.Поскольку Babel 7 будет выпущен как @ babel / core вместо babel-core, сопровождающие не смогут осуществить этот переход без внесения серьезных изменений.например,

...