このディレクトリから例を実行しようとすると、次のエラーが発生します。
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を実行しているDockerコンテナから再現できます。
https://hub.docker.com/_/node/
エラーが発生する手順は次のとおりです。
# 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
この例を実行する方法は正しいですか?
このシナリオを通過させるいくつかのグローバル要件を見逃している可能性はありますか?
追加情報を提供できますか?
編集:
devDependenciesでregeneration-runtimeをbabel-polyfillに置き換えると、この例が機能することがわかりました。
マスターのjestは実際には前のモジュールと互換性があると想定しますが、この例ではマスターコードを使用せず、代わりに、まだbabel-polyfillが必要な最新リリースをプルしています。
Travis CIで同じ問題が発生しています: //travis-ci.org/okonet/lint-staged/jobs/212179781
ローカルでは正常に実行されているが、CIでは実行されていないテスト
私はちょうどこの問題にぶつかりました!
@mpontus @okonet修正されている場合は、 jest@next
を使用できます。それ以外の場合は、 babel-polyfill
インストールする必要があります。
Jestは以前はbabel-polyfill
を自動インクルードしていましたが(19.0.2でもこれを実行します)、メモリリークが発生したため、 regenerator-runtime
のみを使用するようになりました。 v20 npm> = 3またはyarnを使用している場合は、非同期/待機サポートのために何もインストールする必要はありません)。
問題は、ドキュメントからbabel-polyfill
を削除したが、この差分https://github.com/facebook/jest/pull/2755を19.0.2
に含めるのを忘れ、ロールアウトしなかったことです。それ以来、まともなリリース( jest@next
タグのみ)。
ご不便をおかけして申し訳ございません。
@thymikeeトランスフォームと一緒にドキュメントで説明されているようにregenerator-runtime
を使用するにはどうすればよいですか?
プロジェクトで.babelrc
ファイルを使用しておらず、以下のようにwebpackとjestの両方の構成で共有されるbabel構成をロードします。
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)
古い問題を目覚めさせて申し訳ありません。私はJest20.0.4で同じ問題に遭遇しており、これらのコメントの持ち帰りを実際に説明することはできません。 私が見ることができるものから:
babel-preset-env
を使用するようにアドバイスされていますが、 async / awaitの例では、代わりにokonet
と同様に、regeneratorRuntimeはCircleCIで発生しますが、ローカルでは--runInBand
してCIテストスクリプトをローカルで実行しても、それが問題であることを示しているわけではありません。regenerator-runtime
直接インストールする必要があることのようです。同じ問題に直面していました。 babel-polyfill
をjest.init.js
(jestセットアップファイル)に直接インポートすると、問題が解決しました。
...
"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
}
]
しかし、これがそれを処理する最良の方法であるかどうかはわかりません。
これは、Jestの「ReferenceError:regeneratorRuntime isnotdefined」を修正するために機能しました。
npm install --save-dev @babel/plugin-transform-runtime
次に、.babelrcで(他のオプションを除く):
{
"env": {
"test": {
"plugins": ["@babel/plugin-transform-runtime"]
}
}
}
同じ問題に直面していました。
babel-polyfill
をjest.init.js
(jestセットアップファイル)に直接インポートすると、問題が解決しました。... "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']
したがって、ポリフィルをjest.init.js
(存在しなかった)ではなくsetup.js
にインポートする必要がありました。
import Vue from 'vue'
import '@babel/polyfill';
Vue.config.productionTip = false
Vue.config.silent = true
_polyfillインポート行を除いて、他の3行はファイルを開いたときにすでにファイルに含まれていました。_
setup.js
のポリフィルのインポートは機能しましたが、 jest.init.js
インポートは機能しませんでした(setupFilesパスを変更しました)。
現在のターゲットノードの追加は、Jestの「ReferenceError:regeneratorRuntime isnotdefined」を修正するために機能しました:
{
"presets": [
[
"@babel/preset-env",
{
"targets": {
"node": "current"
}
}
]
]
}
現在のターゲットノードの追加は、Jestの「ReferenceError:regeneratorRuntime isnotdefined」を修正するために機能しました:
{ "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
node
に対して、ターゲットを再度明示的に定義する必要がありました。
{
'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',
]
}
}
}
私がしなければならなかった唯一のことは、@ AoDevによって言及されたようにbabelでターゲットを定義することです。 他に追加のターゲットはありません。
regenerator-runtimeをグローバルにインポートして定義するには、次のようにします。
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 :
@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' } }],
],
},
},
},
},
},
@hereここでの試みはどれも
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"、
"babel-jest": "^ 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の設定やプラグインなどを気にする必要があるのですか?
なぜ箱から出して動作しないのですか?
upd。 私の場合、私はすでにbabel.config.jsを持っていましたが、欠落していましたtargets: {
node: 'current'
}
最も参考になるコメント
これは、Jestの「ReferenceError:regeneratorRuntime isnotdefined」を修正するために機能しました。
次に、.babelrcで(他のオプションを除く):