Ошибка Jest Test Babel: файлы плагинов / пресетов не могут экспортировать объекты

Я использую обновленный стек зависимостей (декабрь 2017 г.). Когда я пробую тесты изоморфной реакции с Jest, тестовый костюм продолжает давать сбой со следующей ошибкой:

* Test suite failed to run
[BABEL] /__tests__/router.test.js: Plugin/Preset files are not allowed to
export objects, only functions.

Вот мои зависимости:

"dependencies": {
    "axios": "^0.17.1",
    "babel-polyfill": "^6.26.0",
    "cors": "^2.8.4",
    "express": "^4.16.2",
    "react": "^16.1.1",
    "react-dom": "^16.1.1",
    "react-router-dom": "^4.2.2"
  },
  "devDependencies": {
    "@babel/core": "^7.0.0-beta.35",
    "babel-cli": "^6.26.0",
    "babel-core": "^7.0.0-bridge.0",
    "babel-eslint": "^8.0.2",
    "babel-jest": "^22.0.1",
    "babel-loader": "^7.1.2",
    "babel-preset-env": "^1.6.1",
    "babel-preset-react": "^6.24.1",
    "enzyme": "^3.2.0",
    "enzyme-adapter-react-16": "^1.1.0",
    "enzyme-to-json": "^3.2.2",
    "eslint": "^4.11.0",
    "eslint-plugin-react": "^7.5.1",
    "html-webpack-plugin": "^2.30.1",
    "jest": "^21.2.1",
    "nodemon": "^1.11.0",
    "parallelshell": "^3.0.2",
    "react-test-renderer": "^16.2.0",
    "regenerator-runtime": "^0.11.1",
    "supertest": "^3.0.0",
    "webpack": "^3.8.1",
    "webpack-dev-server": "^2.9.4"
  },
  "peerDependencies": {
    "babel-core": "^7.0.0-0"
  }

.babelrc:

{
  "presets": [
    "env",
    "react",
  ]
}

Кто-нибудь знает, почему Jest не запускается?


person edlee    schedule 19.12.2017    source источник
comment
Обычно использование смеси Babel 6 и 7 вызывает проблемы. Что побудило вас использовать здесь 7?   -  person loganfsmyth    schedule 19.12.2017
comment
Это не производственный проект, вавилонский мост предназначен для решения любых проблем между 6 и 7. Но, да, я согласен, что понижение версии мы решим эту проблему, если никто не знает, что происходит.   -  person edlee    schedule 19.12.2017
comment
babel bridge предназначен для решения любых проблем от 6 до 7. Это на 100% не то, что он делает. Он буквально позволяет Jest загружать Babel 7. Если вы используете Babel 7, вы должны использовать @babel/preset-react и тому подобное.   -  person loganfsmyth    schedule 19.12.2017


Ответы (3)


Вавилонский мост предназначен для решения любых проблем между 6 и 7

Это на 100% не то, что делает пакет bridge. Все, что он делает, это позволяет инструментам, использующим babel-core, переходить к @babel/core. Весь пакет представляет собой одну строку кода.

Если вы используете @babel/core, вам необходимо использовать плагины, которые работают на Babel 7. Это означает, что babel-preset-react следует изменить на @babel/preset-react и то же самое для @babel/preset-env, а ваш .babelrc должен быть:

{
  "presets": [
    "@babel/env",
    "@babel/react",
  ]
}

Точно так же babel-polyfill должно быть @babel/polyfill.

Ничего из этого еще не задокументировано, потому что Babel 7 все еще является нестабильной бета-версией.

person loganfsmyth    schedule 19.12.2017

{
    "presets": [
        "env",
        "react"
    ],
    "test": [
        "jest"
    ]
}

Добавьте последний блок кода для «теста» к вам babel.rc Вот мой код .babelrc для справки.

   {
    "presets": [
        "env",
        "react"
    ],
    "plugins": [
        "transform-class-properties",
        "transform-object-rest-spread"
    ],
    "test": [
        "jest"
    ]
}

Вот мой вывод из командной строки

Test Suites: 1 passed, 1 total
Tests:       1 passed, 1 total
Snapshots:   0 total
Time:        9.264s
Ran all test suites.
Done in 12.99s.
person Antoine Thornton    schedule 13.03.2019
comment
Хотел бы я проголосовать за ваш ответ примерно 25 раз; Такое ощущение, что это сэкономило мне несколько часов. Спасибо что нашли время ответить! - person andyengle; 13.07.2019
comment
это сэкономило мне столько времени. - person EspressoBeans; 19.11.2019
comment
Оно работает. Большое спасибо :) - person Md Nasir Uddin; 10.01.2021

Я столкнулся с той же проблемой при настройке jest для работы с babel-6.

См. полное объяснение здесь

Но в целом эта комбинация --devDependencies сработала для меня, и я настроил babel-jest для преобразования моих **.js файлов:

// package.json

  "devDependencies": {
    "babel-core": "6.26.0",
    "babel-jest": "21.2.0",
    "babel-loader": "7.1.2",
    "babel-preset-env": "1.6.0",
    "babel-preset-react": "6.24.1",
    "babel-preset-stage-0": "6.24.1",
    "jest": "21.2.1",
    "webpack": "3.6.0"
  },
  "jest": {
    "transform": {
      "^.+\\.jsx?$": "babel-jest"
    }
  }

// .babelrc

{
  "presets": [
    "env",
    "stage-0",
    "react"
  ]
}
person MwamiTovi    schedule 19.10.2019