Jest: Erreur dans l'exemple asynchrone : ReferenceError : regeneratorRuntime n'est pas défini

Créé le 12 mars 2017  ·  21Commentaires  ·  Source: facebook/jest

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

Commentaire le plus utile

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"]
    }
  }
}

Tous les 21 commentaires

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:

  • La documentation async/await conseille d'utiliser babel-preset-env , mais l' exemple async/await utilise plutôt
  • Comme 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.
  • Il semble que la cause première soit que 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 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';

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' }

Cette page vous a été utile?
0 / 5 - 0 notes