Ich erhalte folgende Fehlermeldung, wenn ich versuche, ein Beispiel aus diesem Verzeichnis auszuführen:
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.
Das gleiche Problem kann mit Knoten 6.10 und Knoten 7.7.4 reproduziert werden:
git clone https://github.com/facebook/jest jest
cd jest/examples/async
npm install
npm run test
Dies wird nicht lokal in unserem CI oder lokal reproduziert. Vielleicht stimmt etwas mit Ihrer Version von npm nicht?
@cpojer
Danke Chris.
Dieses Problem kann aus dem Docker-Container reproduziert werden, auf dem node:latest aus dem folgenden Repository ausgeführt wird:
https://hub.docker.com/_/node/
Nachfolgend sind die Schritte aufgeführt, die zu einem Fehler führen:
# 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
Liege ich mit der Ausführung dieses Beispiels richtig?
Ist es möglich, dass ich einige globale Anforderungen übersehe, die dieses Szenario erfolgreich machen?
Kann ich Ihnen zusätzliche Informationen anbieten?
Bearbeiten:
Ich habe festgestellt, dass das Beispiel funktioniert, wenn Sie die Regeneration-Laufzeit durch babel-polyfill in devDependencies ersetzen.
Ich gehe davon aus, dass jest in master tatsächlich mit dem vorherigen Modul kompatibel ist, aber das Beispiel verwendet keinen Master-Code und zieht stattdessen die neueste Version, die möglicherweise noch Babel-Polyfill erfordert.
Ich habe das gleiche Problem mit Travis CI: https://travis-ci.org/okonet/lint-staged/jobs/212179781
Tests laufen lokal in Ordnung, aber nicht auf CI
Ich bin gerade auf dieses Problem gestoßen!
@mpontus @okonet Sie können jest@next
wo es behoben ist, oder Sie müssen ansonsten babel-polyfill
installieren.
Jest hat babel-polyfill
automatisch eingefügt (und tut es immer noch in 19.0.2), aber da es Speicherlecks verursachte, haben wir nur regenerator-runtime
, das mit unseren transitiven Deps ausgeliefert wird (also seit Jest v20, wenn Sie npm >=3 oder Garn verwenden, müssen Sie nichts für die Async/Await-Unterstützung installieren).
Das Problem ist, dass wir babel-polyfill
aus den Dokumenten entfernt haben, aber vergessen haben, dieses Diff https://github.com/facebook/jest/pull/2755 in 19.0.2
und es nicht eingeführt hat seitdem ordentliche Veröffentlichung (nur jest@next
Tag).
Entschuldigung für die Unannehmlichkeiten!
@thymikee Wie kann ich regenerator-runtime
wie in den Dokumenten beschrieben zusammen mit einer Transformation verwenden?
Ich verwende keine .babelrc
Datei in meinem Projekt und lade eine Babel-Konfiguration, die wie unten sowohl für die Webpack- als auch für die Jest-Konfiguration freigegeben ist:
jest.config.js
...
'transform': {
'^.+\\.js$': '<rootDir>/config/jest.transform.js'
}
...
scherz.transform.js
var babelConfig = require('./babel.config')
module.exports = require('babel-jest').createTransformer(babelConfig)
Es tut mir leid, ein altes Problem aufzuwecken: Ich habe das gleiche Problem mit Jest 20.0.4 und kann diese Kommentare nicht wirklich nachvollziehen. Von dem was ich sehen kann:
babel-preset-env
, aber das async/await-Beispiel verwendet stattdessen okonet
taucht die regeneratorRuntime auf --runInBand
zeigt nicht an, dass dies das Problem ist.regenerator-runtime
direkt installiert werden muss, wenn Sie einen älteren Paketmanager verwenden, was unter CI wahrscheinlich ist.Ich hatte das gleiche Problem, das Importieren von babel-polyfill
direkt in die jest.init.js
(jest Setup-Datei) löste das Problem für mich.
...
"setupFiles": [
"<rootDir>/jest.init.js"
],
...
/// jest.init.js
import Enzyme from 'enzyme';
import Adapter from 'enzyme-adapter-react-16';
import 'babel-polyfill';
Entschuldigung für die Beule! Aber ich wollte teilen 😄 . Das Hinzufügen in meinen allgemeinen Plugins funktioniert für mich:
[
"transform-runtime",
{
"helpers": false,
"polyfill": false,
"regenerator": true
}
]
Ich weiß allerdings nicht, ob das der beste Weg ist, damit umzugehen.
Dies hat bei mir funktioniert, um "ReferenceError: regeneratorRuntime is not defined" in Jest zu beheben:
npm install --save-dev @babel/plugin-transform-runtime
Dann in .babelrc (neben anderen Optionen):
{
"env": {
"test": {
"plugins": ["@babel/plugin-transform-runtime"]
}
}
}
Ich hatte das gleiche Problem, das Importieren von
babel-polyfill
direkt in diejest.init.js
(jest Setup-Datei) löste das Problem für mich.... "setupFiles": [ "<rootDir>/jest.init.js" ], ...
/// jest.init.js import Enzyme from 'enzyme'; import Adapter from 'enzyme-adapter-react-16'; import 'babel-polyfill';
Ich habe versucht, das Polyfill in jest.init.js
importieren, aber es hat meine Tests seltsam gebrochen. Ich hatte nicht den undefinierten Generatorfehler, aber ich hatte viele Fehler, die ich zuvor in meinen Tests nicht hatte, wie fehlende Komponentenimporte oder fehlende Requisiten.
Mein jest.conf.js
enthielt die folgende Zeile:
setupFiles: ['<rootDir>/test/unit/setup']
Daher musste ich das Polyfill in setup.js
anstelle von jest.init.js
(das nicht existierte) importieren:
import Vue from 'vue'
import '@babel/polyfill';
Vue.config.productionTip = false
Vue.config.silent = true
_Mit Ausnahme der Polyfill-Importzeile waren die 3 anderen Zeilen bereits in der Datei, als ich sie öffnete._
Das Importieren des Polyfills in setup.js
funktionierte, während das Importieren in jest.init.js
nicht funktionierte (ich habe den setupFiles-Pfad geändert).
Das Hinzufügen von Zielknotenstrom hat für mich funktioniert, um "ReferenceError: regeneratorRuntime is not defined" in Jest zu beheben:
{
"presets": [
[
"@babel/preset-env",
{
"targets": {
"node": "current"
}
}
]
]
}
Das Hinzufügen von Zielknotenstrom hat für mich funktioniert, um "ReferenceError: regeneratorRuntime is not defined" in Jest zu beheben:
{ "presets": [ [ "@babel/preset-env", { "targets": { "node": "current" } } ] ] }
Dies wird dem Babelyfing nicht wirklich helfen, mein Code wird nicht mit dem aktuellen Zielknoten kompiliert. Es sieht genauso aus (ES6). Tests würden laufen, toll, aber kein kompilierter Code :P
Hier ist ein Ausschnitt meiner package.json, das funktioniert jetzt für mich.
"babel": {
"presets": [
[
"@babel/preset-env",
{
"targets": {
"node": "current"
}
}
],
"@babel/preset-react"
],
"plugins": [
"component-identification",
"@babel/plugin-proposal-class-properties",
[
"module-resolver",
{
"root": [
"./src"
]
}
]
]
},
Für mich reichte es nicht aus, Preset-Env-Ziele in der gemeinsamen Konfiguration anzugeben.
Ich musste die Ziele für node
unter env.test
einmal explizit definieren.
{
'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',
]
}
}
}
Das einzige, was ich tun musste, war, das Ziel in Babel zu definieren, wie von @AoDev erwähnt. Keine weiteren Ziele woanders.
Um regenerator-runtime global zu importieren und zu definieren, gehen Sie wie folgt vor:
require('regenerator-runtime/runtime');
Für diejenigen, die nur das erforderliche Ding hinzufügen und nicht mit dem Hinzufügen aller Babel-Polyfills zum Spaß herumspielen möchten.
Dies wurde im Blogbeitrag zur Einführung von Jest 24 erwähnt, falls die Leute es verpasst haben: https://jestjs.io/blog/2019/01/25/jest-24-refreshing-polished-typescript-friendly#breaking -changes. Sie müssen Babel richtig konfigurieren und müssen keinen Code ändern. Siehe diesen Kommentar aus der PR: https://github.com/facebook/jest/pull/7595#issuecomment -454486373
@ghengeveld Das ist Arbeit für mich, danke
Was es für mich gelöst hat, war, nicht nur den Regenerator, sondern auch die Laufzeit zu meiner Konfiguration hinzuzufügen:
'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' } }],
],
},
},
},
},
},
@hier hat keiner der Versuche hier für mich
ReferenceError: regeneratorRuntime is not defined
Das ist mein Paket.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-scherz": "^24.9.0",
"babel-plugin-module-resolver": "^3.1.3",
"babel-plugin-transform-runtime": "^6.23.0",
"Entgiftung": "^16.5.1",
.babelrc
Immer wenn ich dieser Datei etwas hinzufüge, werden meine App-Dateien nicht ausgeführt. Ich muss diese Datei wieder löschen, damit meine reaktive native App ausgeführt wird
Auf das gleiche Problem gestoßen. Frischer jest
(26.6.3), einfacher asynchroner Test und das..
Für ein Framework, das sich selbst als "entzückend" definiert, ist dies wirklich nicht der Fall.
Warum um alles in der Welt muss ich mich um die Konfiguration von Babel, Plugins usw.
Warum funktioniert es nicht out of the box?
upd. In meinem Fall hatte ich bereits babel.config.js, aber es fehlte
targets: {
node: 'current'
}
Hilfreichster Kommentar
Dies hat bei mir funktioniert, um "ReferenceError: regeneratorRuntime is not defined" in Jest zu beheben:
Dann in .babelrc (neben anderen Optionen):