Jest: Error en el ejemplo asíncrono: ReferenceError: regeneratorRuntime no está definido

Creado en 12 mar. 2017  ·  21Comentarios  ·  Fuente: facebook/jest

Recibo el siguiente error cuando intento ejecutar un ejemplo desde este directorio:
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.

El mismo problema se puede reproducir utilizando el nodo 6.10 y el nodo 7.7.4:

git clone https://github.com/facebook/jest jest
cd jest/examples/async
npm install
npm run test

Comentario más útil

Esto me funcionó para arreglar "ReferenceError: regeneratorRuntime no está definido" en Jest:

npm install --save-dev @babel/plugin-transform-runtime

Luego en .babelrc (además de otras opciones):

{
  "env": {
    "test": {
      "plugins": ["@babel/plugin-transform-runtime"]
    }
  }
}

Todos 21 comentarios

Esto no se reproduce localmente en nuestro CI o localmente. ¿Quizás hay algún problema con su versión de npm?

@cpojer

Gracias Chris.

Este problema se puede reproducir desde el contenedor docker ejecutando node:latest desde el siguiente repositorio:
https://hub.docker.com/_/nodo/

A continuación se muestran los pasos que conducen a un error:

# 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

¿Estoy en lo correcto en la forma en que ejecuto este ejemplo?
¿Es posible que me falten algunos requisitos globales que harán que este escenario pase?
¿Puedo ofrecerte alguna información adicional?

Editar:
Descubrí que el ejemplo funciona si reemplaza el tiempo de ejecución de regeneración con babel-polyfill en devDependencies.

Voy a suponer que jest in master es realmente compatible con el módulo anterior, pero el ejemplo no usa el código maestro y, en cambio, extrae la última versión que aún puede requerir babel-polyfill.

Estoy experimentando el mismo problema con Travis CI: https://travis-ci.org/okonet/lint-staged/jobs/212179781

Las pruebas funcionan bien localmente pero no en CI

¡Me acabo de encontrar con este problema!

@mpontus @okonet puede usar jest@next donde está arreglado o, de lo contrario, necesita instalar babel-polyfill .

Jest solía incluir automáticamente babel-polyfill (y aún lo hace en 19.0.2), pero como causaba fugas de memoria, pasamos a usar regenerator-runtime únicamente, que se envía con nuestras dependencias transitivas (así que desde Jest v20 si está usando npm >=3 o yarn, no necesita instalar nada para la compatibilidad con async/await).

El problema es que erradicamos babel-polyfill de los documentos, pero olvidamos incluir esta diferencia https://github.com/facebook/jest/pull/2755 en 19.0.2 y no lanzamos un lanzamiento decente desde entonces (solo jest@next etiqueta).
¡Perdon por el inconveniente!

@thymikee ¿Cómo puedo usar regenerator-runtime como se describe en los documentos junto con una transformación?
No estoy usando ningún archivo .babelrc en mi proyecto y cargo una configuración de babel que se comparte tanto para el paquete web como para la configuración de broma como se muestra a continuación:

jest.config.js

...
'transform': {
    '^.+\\.js$': '<rootDir>/config/jest.transform.js'
}
...

broma.transform.js

var babelConfig = require('./babel.config')

module.exports = require('babel-jest').createTransformer(babelConfig)

Lamento despertar un problema antiguo: me encuentro con el mismo problema con Jest 20.0.4, y realmente no puedo entender la conclusión de estos comentarios. Por lo que puedo ver:

  • La documentación de async/await aconseja usar babel-preset-env , pero el ejemplo de async/await usa babel-plugin-transform-runtime en su lugar. ¿Cuál es la dependencia recomendada?
  • Al igual que okonet , regeneratorRuntime surge en CircleCI pero no localmente. Ejecutar mi secuencia de comandos de prueba de CI localmente con --runInBand no indica que ese sea el problema.
  • Parece que la causa raíz es que regenerator-runtime debe instalarse directamente si está utilizando un administrador de paquetes anterior, lo cual, en CI, es probable.

Estaba enfrentando el mismo problema, importar el babel-polyfill directamente al jest.init.js (archivo de configuración de broma) me resolvió el problema.

  ...
 "setupFiles": [
   "<rootDir>/jest.init.js"
  ],
  ...
/// jest.init.js
import Enzyme from 'enzyme';
import Adapter from 'enzyme-adapter-react-16';
import 'babel-polyfill';

¡Perdón por el bache! Pero quería compartir 😄 . Agregar esto en mis complementos generales funciona para mí:

    [
      "transform-runtime",
      {
        "helpers": false,
        "polyfill": false,
        "regenerator": true
      }
    ]

Sin embargo, no sé si esta es la mejor manera de manejarlo.

Esto me funcionó para arreglar "ReferenceError: regeneratorRuntime no está definido" en Jest:

npm install --save-dev @babel/plugin-transform-runtime

Luego en .babelrc (además de otras opciones):

{
  "env": {
    "test": {
      "plugins": ["@babel/plugin-transform-runtime"]
    }
  }
}

Estaba enfrentando el mismo problema, importar el babel-polyfill directamente al jest.init.js (archivo de configuración de broma) me resolvió el problema.

  ...
 "setupFiles": [
   "<rootDir>/jest.init.js"
  ],
  ...
/// jest.init.js
import Enzyme from 'enzyme';
import Adapter from 'enzyme-adapter-react-16';
import 'babel-polyfill';

Traté de importar el polyfill en jest.init.js pero rompió mis pruebas extrañamente. No tenía el error del generador indefinido, pero tenía muchos errores que no tenía antes en mis pruebas, como la falta de importaciones de componentes o la falta de accesorios.

Mi jest.conf.js contenía la siguiente línea:

setupFiles: ['<rootDir>/test/unit/setup']

Por lo tanto, tuve que importar el polyfill en setup.js lugar de jest.init.js (que no existía):

import Vue from 'vue'
import '@babel/polyfill';

Vue.config.productionTip = false
Vue.config.silent = true

_Excepto por la línea de importación de polyfill, las otras 3 líneas ya estaban en el archivo cuando lo abrí._

La importación del polyfill en setup.js funcionó mientras que la importación en jest.init.js no funcionó (cambié la ruta de configuración de los archivos).

Agregar el nodo de destino actual me funcionó para corregir "ReferenceError: regeneratorRuntime no está definido" en Jest:

{
  "presets": [
    [
      "@babel/preset-env",
      {
        "targets": {
          "node": "current"
        }
      }
    ]
  ]
}

Agregar el nodo de destino actual me funcionó para corregir "ReferenceError: regeneratorRuntime no está definido" en Jest:

{
  "presets": [
    [
      "@babel/preset-env",
      {
        "targets": {
          "node": "current"
        }
      }
    ]
  ]
}

Esto en realidad no ayudará a babelyfing, mi código no se compilará con el nodo de destino actual. Se verá exactamente igual (ES6). Las pruebas se estarían ejecutando, genial, pero no hay código compilado: P

Aquí hay un fragmento de mi paquete.json, esto funciona para mí ahora.

"babel": {
    "presets": [
      [
        "@babel/preset-env",
        {
          "targets": {
            "node": "current"
          }
        }
      ],
      "@babel/preset-react"
    ],
    "plugins": [
      "component-identification",
      "@babel/plugin-proposal-class-properties",
      [
        "module-resolver",
        {
          "root": [
            "./src"
          ]
        }
      ]
    ]
  },

Para mí, no fue suficiente tener objetivos de entorno preestablecido especificados en la configuración común.
Tuve que volver a definir los objetivos explícitamente para node bajo 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',
      ]
    }
  }
}

Lo único que tuve que hacer es definir el objetivo en babel como lo menciona @AoDev. No hay objetivos adicionales en otros lugares.

Para importar y definir regenerator-runtime globalmente, haga lo siguiente:

require('regenerator-runtime/runtime');

Para aquellos que solo quieren agregar lo requerido, y no perder el tiempo agregando todos los polyfills de babel por broma.

Esto se mencionó en la publicación de blog que presenta Jest 24, si la gente se lo perdió: https://jestjs.io/blog/2019/01/25/jest-24-refreshing-polished-typescript-friendly#breaking -changes. Debe configurar babel correctamente, no es necesario cambiar ningún código. Vea este comentario del PR: https://github.com/facebook/jest/pull/7595#issuecomment -454486373

@ghengeveld Esto es trabajo para mí, gracias

Lo que me resolvió fue no solo agregar el regenerador, sino también el tiempo de ejecución a mi configuración:

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

@aquí ninguno de los intentos aquí ha funcionado para mí, todavía parece que el conjunto de pruebas no se pudo ejecutar

ReferenceError: regeneratorRuntime is not defined

Este es mi paquete.json
"Dependencias de desarrollo": {
"@babel/core": "^7.6.2",
"@babel/plugin-transform-regenerator": "^7.8.7",
"@babel/tiempo de ejecución": "^7.9.6",
"@react-native-community/eslint-config": "^0.0.5",
"babel-eslint": "^10.0.1",
"babel-jest": "^24.9.0",
"babel-plugin-módulo-resolver": "^3.1.3",
"babel-plugin-transform-runtime": "^6.23.0",
"desintoxicación": "^16.5.1",

.babelrc
cada vez que agrego algo en este archivo, los archivos de mi aplicación no se ejecutarán. Tengo que volver a borrar este archivo para que mi aplicación nativa reactiva se ejecute

Encontró el mismo problema. Nuevo jest (26.6.3), prueba asíncrona simple y esto...
Para un marco que se define a sí mismo como "encantador", esto realmente no lo es.
¿Por qué diablos necesito preocuparme por la configuración de babel, los complementos, etc.
¿Por qué no puede funcionar fuera de la caja?

actualización En mi caso, ya tenía babel.config.js pero faltaba
targets: { node: 'current' }

¿Fue útil esta página
0 / 5 - 0 calificaciones