J'obtiens l'erreur suivante lorsque j'essaie d'exécuter un exemple à partir de ce répertoire :
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.
Le même problème peut être reproduit à l'aide des nœuds 6.10 et 7.7.4 :
git clone https://github.com/facebook/jest jest
cd jest/examples/async
npm install
npm run test
Cela ne se reproduise pas localement sur notre CI ou localement. Peut-être qu'il y a quelque chose qui ne va pas avec votre version de npm ?
@cpojer
Merci Chris.
Ce problème peut être reproduit à partir du conteneur Docker exécutant node:latest à partir du référentiel suivant :
https://hub.docker.com/_/node/
Voici les étapes qui mènent à une erreur :
# 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
Ai-je raison dans la façon dont j'exécute cet exemple ?
Est-il possible qu'il me manque certaines exigences globales qui feront passer ce scénario ?
Puis-je vous offrir des informations supplémentaires?
Éditer:
J'ai trouvé que cet exemple fonctionne si vous remplacez regeneration-runtime par babel-polyfill dans devDependencies.
Je vais supposer que jest dans master est en fait compatible avec l'ancien module, mais l'exemple n'utilise pas de code maître et extrait à la place la dernière version qui peut toujours nécessiter babel-polyfill.
Je rencontre le même problème avec Travis CI : https://travis-ci.org/okonet/lint-staged/jobs/212179781
Les tests s'exécutent correctement localement mais pas sur CI
Je viens de tomber sur ce problème !
@mpontus @okonet vous pouvez utiliser jest@next
là où c'est corrigé ou sinon vous devez installer babel-polyfill
.
Jest incluait automatiquement babel-polyfill
(et le fait toujours dans 19.0.2), mais comme cela provoquait des fuites de mémoire, nous sommes passés à l'utilisation de regenerator-runtime
uniquement, qui est livré avec nos deps transitifs (donc depuis Jest v20 si vous utilisez npm >=3 ou fil, vous n'avez rien à installer pour la prise en charge async/wait).
Le problème est que nous avons supprimé babel-polyfill
de la documentation, mais que nous avons oublié d'inclure ce diff https://github.com/facebook/jest/pull/2755 dans 19.0.2
et que nous n'avons pas déployé de sortie décente depuis lors (seulement balise jest@next
).
Désolé pour la gêne occasionnée !
@thymikee Comment puis-je utiliser regenerator-runtime
comme décrit dans la documentation avec une transformation ?
Je n'utilise aucun fichier .babelrc
dans mon projet et charge une configuration babel qui est partagée à la fois pour la configuration webpack et jest comme ci-dessous :
jest.config.js
...
'transform': {
'^.+\\.js$': '<rootDir>/config/jest.transform.js'
}
...
jest.transform.js
var babelConfig = require('./babel.config')
module.exports = require('babel-jest').createTransformer(babelConfig)
Désolé de réveiller un vieux problème : je rencontre le même problème avec Jest 20.0.4, et je ne peux pas vraiment comprendre les conclusions de ces commentaires. D'après ce que je peux voir:
babel-preset-env
, mais l' exemple async/await utilise plutôt okonet
, le regeneratorRuntime apparaît sur CircleCI mais pas localement. L'exécution de mon script de test CI localement avec --runInBand
n'indique pas que c'est le problème.regenerator-runtime
doit être installé directement si vous utilisez un ancien gestionnaire de packages, ce qui, sur CI, est probable.J'étais confronté au même problème, importer le babel-polyfill
directement dans le jest.init.js
(fichier d'installation de plaisanterie) a résolu le problème pour moi.
...
"setupFiles": [
"<rootDir>/jest.init.js"
],
...
/// jest.init.js
import Enzyme from 'enzyme';
import Adapter from 'enzyme-adapter-react-16';
import 'babel-polyfill';
Désolé pour la bosse ! Mais je voulais partager 😄 . L'ajout de ceci dans mes plugins généraux fonctionne pour moi :
[
"transform-runtime",
{
"helpers": false,
"polyfill": false,
"regenerator": true
}
]
Je ne sais pas si c'est la meilleure façon de le gérer, cependant.
Cela a fonctionné pour moi pour corriger "ReferenceError: regeneratorRuntime n'est pas défini" dans Jest :
npm install --save-dev @babel/plugin-transform-runtime
Puis en .babelrc (en plus des autres options) :
{
"env": {
"test": {
"plugins": ["@babel/plugin-transform-runtime"]
}
}
}
J'étais confronté au même problème, importer le
babel-polyfill
directement dans lejest.init.js
(fichier d'installation de plaisanterie) a résolu le problème pour moi.... "setupFiles": [ "<rootDir>/jest.init.js" ], ...
/// jest.init.js import Enzyme from 'enzyme'; import Adapter from 'enzyme-adapter-react-16'; import 'babel-polyfill';
J'ai essayé d'importer le polyfill dans jest.init.js
mais cela a cassé mes tests bizarrement. Je n'avais pas l'erreur de générateur non définie, mais j'avais beaucoup d'erreurs que je n'avais pas auparavant dans mes tests, telles que des importations de composants manquantes ou des accessoires manquants.
Mon jest.conf.js
contenait la ligne suivante :
setupFiles: ['<rootDir>/test/unit/setup']
J'ai donc dû importer le polyfill en setup.js
au lieu de jest.init.js
(qui n'existait pas) :
import Vue from 'vue'
import '@babel/polyfill';
Vue.config.productionTip = false
Vue.config.silent = true
_Sauf pour la ligne d'import polyfill, les 3 autres lignes étaient déjà dans le fichier quand je l'ai ouvert._
L'importation du polyfill dans setup.js
fonctionné alors que son importation dans jest.init.js
n'a pas fonctionné (j'ai changé le chemin setupFiles).
L'ajout du courant de nœud de cibles a fonctionné pour moi pour corriger "ReferenceError: regeneratorRuntime is notdefined" dans Jest :
{
"presets": [
[
"@babel/preset-env",
{
"targets": {
"node": "current"
}
}
]
]
}
L'ajout du courant de nœud de cibles a fonctionné pour moi pour corriger "ReferenceError: regeneratorRuntime is notdefined" dans Jest :
{ "presets": [ [ "@babel/preset-env", { "targets": { "node": "current" } } ] ] }
Cela n'aidera pas vraiment babelyfing, mon code ne sera pas compilé avec le nœud cible actuel. Il aura exactement la même apparence (ES6). Les tests seraient en cours, super, mais pas de code compilé :P
Voici un extrait de mon package.json, cela fonctionne pour moi maintenant.
"babel": {
"presets": [
[
"@babel/preset-env",
{
"targets": {
"node": "current"
}
}
],
"@babel/preset-react"
],
"plugins": [
"component-identification",
"@babel/plugin-proposal-class-properties",
[
"module-resolver",
{
"root": [
"./src"
]
}
]
]
},
Pour moi, il ne suffisait pas d'avoir des cibles d'environnement prédéfinies spécifiées dans la configuration commune.
Je devais définir les objectifs à nouveau explicitement node
en 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',
]
}
}
}
La seule chose que je devais faire était de définir la cible dans babel comme mentionné par @AoDev. Pas de cibles supplémentaires ailleurs.
Pour importer et définir globalement le runtime du régénérateur, procédez comme suit :
require('regenerator-runtime/runtime');
Pour ceux qui veulent juste ajouter la chose requise, et ne pas déconner avec l'ajout de tous les polyfills babel pour plaisanter.
Cela a été mentionné dans le billet de blog présentant Jest 24, si les gens l'ont manqué : https://jestjs.io/blog/2019/01/25/jest-24-refreshing-polished-typescript-friendly#breaking -changes. Vous devez configurer babel correctement, pas besoin de modifier le code. Voir ce commentaire du PR : https://github.com/facebook/jest/pull/7595#issuecomment -454486373
@ghengeveld C'est du travail pour moi, merci
Ce qui a résolu le problème pour moi, c'était non seulement d'ajouter le régénérateur, mais aussi le runtime à ma configuration :
'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' } }],
],
},
},
},
},
},
@ici aucune des tentatives ici n'a fonctionné pour moi, il me semble toujours que la suite de tests n'a pas réussi à s'exécuter
ReferenceError: regeneratorRuntime is not defined
C'est mon mon 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",
"babel-jest": "^24.9.0",
"babel-plugin-module-resolver": "^3.1.3",
"babel-plugin-transform-runtime": "^6.23.0",
"detox": "^16.5.1",
.babelrc
chaque fois que j'ajoute quelque chose sur ce fichier, mes fichiers d'application ne s'exécuteront pas. Je dois supprimer ce fichier pour que mon application native réactive s'exécute
Rencontré le même problème. Frais jest
(26.6.3), test asynchrone simple et ceci ..
Pour un cadre qui se définit comme « délicieux », ce n'est vraiment pas le cas.
Pourquoi diable ai-je besoin de me soucier de la configuration de Babel, des plugins, etc.
Pourquoi ne peut-il pas fonctionner hors de la boîte ?
mise à jour. Dans mon cas, j'avais déjà babel.config.js mais il manquait
targets: {
node: 'current'
}
Commentaire le plus utile
Cela a fonctionné pour moi pour corriger "ReferenceError: regeneratorRuntime n'est pas défini" dans Jest :
Puis en .babelrc (en plus des autres options) :