Я получаю следующую ошибку при попытке запустить пример из этого каталога:
https://github.com/facebook/jest/tree/master/examples/async
FAIL __tests__/user-test.js
● Test suite failed to run
ReferenceError: regeneratorRuntime is not defined
at Object.<anonymous> (__tests__/user-test.js:16:48)
at process._tickCallback (internal/process/next_tick.js:103:7)
Test Suites: 1 failed, 1 total
Tests: 0 total
Snapshots: 0 total
Time: 1.495s
Ran all test suites.
Та же проблема может быть воспроизведена с использованием узла 6.10 и узла 7.7.4:
git clone https://github.com/facebook/jest jest
cd jest/examples/async
npm install
npm run test
Это не воспроизводится локально на нашем CI или локально. Может быть, что-то не так с вашей версией npm?
@cpojer
Спасибо, Крис.
Эту проблему можно воспроизвести из контейнера докеров, на котором запущен node:latest из следующего репозитория:
https://hub.docker.com/_/узел/
Ниже приведены шаги, которые приводят к ошибке:
# from local machine (also tested in vagrant 1.9.2 running ubuntu/trusty64)
docker pull node:latest
docker run --rm -it node bash
# from inside the container (docker version 17.03.0-ce, node version 7.7.2)
git clone https://github.com/facebook/jest /jest
cd /jest
# as per instructions from https://github.com/facebook/jest/tree/master/examples
npm install
cd examples/async
npm install
npm test
Правильно ли я выполняю этот пример?
Возможно ли, что я пропускаю некоторые глобальные требования, которые сделают этот сценарий пройденным?
Могу ли я предложить вам дополнительную информацию?
Редактировать:
Я обнаружил, что этот пример работает, если вы замените regeneration-runtime на babel-polyfill в devDependencies.
Я собираюсь предположить, что jest в мастере на самом деле совместим с предыдущим модулем, но в примере не используется мастер-код, а вместо этого используется последний выпуск, для которого все еще может потребоваться babel-polyfill.
У меня такая же проблема с Travis CI: https://travis-ci.org/okonet/lint-staged/jobs/212179781
Тесты работают нормально локально, но не в CI
Я только что столкнулся с этой проблемой!
@mpontus @okonet вы можете использовать jest@next
там, где это исправлено, или в противном случае вам нужно установить babel-polyfill
.
Раньше Jest автоматически включал babel-polyfill
(и до сих пор делает это в версии 19.0.2), но поскольку это вызывало утечку памяти, мы перешли к использованию только regenerator-runtime
, который поставляется с нашими транзитивными зависимостями (так как Jest v20, если вы используете npm>=3 или yarn, вам не нужно ничего устанавливать для поддержки async/await).
Проблема в том, что мы удалили babel-polyfill
из документов, но забыли включить этот diff https://github.com/facebook/jest/pull/2755 в 19.0.2
и не развернули достойный релиз с тех пор (только тег jest@next
).
Извините за неудобства!
@thymikee Как я могу использовать regenerator-runtime
как описано в документации, вместе с преобразованием?
Я не использую какой-либо файл .babelrc
в своем проекте и загружаю конфигурацию babel, которая используется как для веб-пакета, так и для конфигурации jest, как показано ниже:
jest.config.js
...
'transform': {
'^.+\\.js$': '<rootDir>/config/jest.transform.js'
}
...
шутка.transform.js
var babelConfig = require('./babel.config')
module.exports = require('babel-jest').createTransformer(babelConfig)
Извините, что разбудил старую проблему: я столкнулся с той же проблемой с Jest 20.0.4 и не могу понять суть этих комментариев. Из того, что я вижу:
babel-preset-env
, но в примере с используется babel-plugin-transform-runtime . Какая рекомендуемая зависимость?okonet
, regeneratorRuntime возникает в CircleCI, но не локально. Запуск моего тестового сценария CI локально с --runInBand
не указывает на то, что это проблема.regenerator-runtime
необходимо установить напрямую, если вы используете более старый менеджер пакетов, что, вероятно, в CI.Я столкнулся с той же проблемой, импорт babel-polyfill
непосредственно в jest.init.js
(файл настройки шутки) решил проблему для меня.
...
"setupFiles": [
"<rootDir>/jest.init.js"
],
...
/// jest.init.js
import Enzyme from 'enzyme';
import Adapter from 'enzyme-adapter-react-16';
import 'babel-polyfill';
Извините за наезд! Но захотелось поделиться 😄 . Добавление этого в мои общие плагины работает для меня:
[
"transform-runtime",
{
"helpers": false,
"polyfill": false,
"regenerator": true
}
]
Однако я не знаю, лучший ли это способ справиться с этим.
Это сработало для меня, чтобы исправить «ReferenceError: regeneratorRuntime не определен» в Jest:
npm install --save-dev @babel/plugin-transform-runtime
Затем в .babelrc (помимо других вариантов):
{
"env": {
"test": {
"plugins": ["@babel/plugin-transform-runtime"]
}
}
}
Я столкнулся с той же проблемой, импорт
babel-polyfill
непосредственно вjest.init.js
(файл настройки шутки) решил проблему для меня.... "setupFiles": [ "<rootDir>/jest.init.js" ], ...
/// jest.init.js import Enzyme from 'enzyme'; import Adapter from 'enzyme-adapter-react-16'; import 'babel-polyfill';
Я попытался импортировать полифилл в jest.init.js
но это странно сломало мои тесты. У меня не было ошибки неопределенного генератора, но у меня было много ошибок, которых раньше не было в моих тестах, таких как отсутствующий импорт компонентов или отсутствующие реквизиты.
Моя jest.conf.js
содержала следующую строку:
setupFiles: ['<rootDir>/test/unit/setup']
Поэтому мне пришлось импортировать полифилл в setup.js
вместо jest.init.js
(которого не существовало):
import Vue from 'vue'
import '@babel/polyfill';
Vue.config.productionTip = false
Vue.config.silent = true
_За исключением строки импорта полифилла, 3 другие строки уже были в файле, когда я его открыл._
Импорт полифилла в setup.js
работал, а импорт в jest.init.js
не работал (я изменил путь к setupFiles).
Добавление текущего узла цели помогло мне исправить «ReferenceError: regeneratorRuntime не определено» в Jest:
{
"presets": [
[
"@babel/preset-env",
{
"targets": {
"node": "current"
}
}
]
]
}
Добавление текущего узла цели помогло мне исправить «ReferenceError: regeneratorRuntime не определено» в Jest:
{ "presets": [ [ "@babel/preset-env", { "targets": { "node": "current" } } ] ] }
На самом деле это не поможет babelyfing, мой код не будет скомпилирован с текущим целевым узлом. Он будет выглядеть точно так же (ES6). Тесты будут работать, отлично, но нет скомпилированного кода: P
Вот фрагмент моего package.json, теперь это работает для меня.
"babel": {
"presets": [
[
"@babel/preset-env",
{
"targets": {
"node": "current"
}
}
],
"@babel/preset-react"
],
"plugins": [
"component-identification",
"@babel/plugin-proposal-class-properties",
[
"module-resolver",
{
"root": [
"./src"
]
}
]
]
},
Для меня было недостаточно указать цели preset-env в общей конфигурации.
Мне пришлось снова явно определить цели для node
под env.test
.
{
'presets': [
[
'@babel/preset-env',
{
'targets': {
'chrome': 61,
'node': 8,
'electron': '2.0.9'
},
}
],
'@babel/typescript',
'@babel/preset-react'
],
'env': {
'test': {
'presets': [
[
'@babel/preset-env',
{
'targets': {
'node': 8, // <- ADDED
},
}
],
'@babel/typescript',
]
}
}
}
Единственное, что мне нужно было сделать, это определить цель в babel, как упоминалось @AoDev. Никаких дополнительных целей в других местах.
Чтобы глобально импортировать и определить среду выполнения регенератора, выполните следующие действия:
require('regenerator-runtime/runtime');
Для тех, кто просто хочет добавить нужное, а не возиться с добавлением всех полифилов babel ради шутки.
Об этом упоминалось в сообщении блога, посвященном Jest 24, если люди его пропустили: https://jestjs.io/blog/2019/01/25/jest-24-refreshing-polished-typescript-friendly#breaking -changes. Вам нужно правильно настроить babel, не нужно менять какой-либо код. См. этот комментарий от PR: https://github.com/facebook/jest/pull/7595#issuecomment -454486373
@ghengeveld Это работа для меня, спасибо
Что решило это для меня, так это не просто добавить регенератор, но и среду выполнения в мою конфигурацию:
'globals': {
'vue-jest': {
'babelConfig': {
'plugins': [
'@babel/plugin-transform-regenerator',
'@babel/plugin-transform-runtime',
],
'presets': [['@babel/preset-env', { 'modules': false }]],
'env': {
'test': {
'presets': [
['@babel/preset-env', { 'targets': { 'node': 'current' } }],
],
},
},
},
},
},
@ здесь ни одна из попыток здесь не сработала для меня, кажется, я все еще получаю, что набор тестов не запускается
ReferenceError: regeneratorRuntime is not defined
Это мой мой package.json
"devDependencies": {
"@babel/core": "^7.6.2",
"@babel/plugin-transform-regenerator": "^7.8.7",
"@babel/runtime": "^7.9.6",
"@react-native-community/eslint-config": "^0.0.5",
"babel-eslint": "^10.0.1",
"вавилонская шутка": "^24.9.0",
"babel-plugin-module-resolver": "^3.1.3",
"babel-plugin-transform-runtime": "^6.23.0",
"детокс": "^16.5.1",
.babelrc
всякий раз, когда я добавляю что-то в этот файл, файлы моего приложения не будут запускаться. Я должен удалить этот файл обратно, чтобы запустить мое реактивное родное приложение.
Столкнулся с той же проблемой. Свежий jest
(26.6.3), простой асинхронный тест и это..
Для фреймворка, который определяет себя как «восхитительный», на самом деле это не так.
С какой стати мне нужно беспокоиться о конфигурации Babel, плагинах и т. д.
Почему это не может работать из коробки?
обновление В моем случае у меня уже был babel.config.js, но он отсутствовал
targets: {
node: 'current'
}
Самый полезный комментарий
Это сработало для меня, чтобы исправить «ReferenceError: regeneratorRuntime не определен» в Jest:
Затем в .babelrc (помимо других вариантов):