Saya mendapatkan kesalahan berikut ketika mencoba menjalankan contoh dari direktori ini:
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.
Masalah yang sama dapat direproduksi menggunakan node 6.10 dan node 7.7.4:
git clone https://github.com/facebook/jest jest
cd jest/examples/async
npm install
npm run test
Ini tidak repro secara lokal di CI kami atau secara lokal. Mungkin ada yang salah dengan versi npm Anda?
@cpojer
Terima kasih Kris.
Masalah ini dapat direproduksi dari wadah buruh pelabuhan yang menjalankan node: terbaru dari repositori berikut:
https://hub.docker.com/_/node/
Berikut adalah langkah-langkah yang menyebabkan kesalahan:
# 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
Apakah cara saya menjalankan contoh ini benar?
Mungkinkah saya melewatkan beberapa persyaratan global yang akan membuat skenario ini lolos?
Bisakah saya menawarkan info tambahan?
Sunting:
Saya menemukan bahwa contoh berfungsi jika Anda mengganti waktu proses regenerasi dengan babel-polyfill di devDependencies.
Saya akan berasumsi bahwa lelucon di master sebenarnya kompatibel dengan modul sebelumnya, tetapi contoh tidak menggunakan kode master dan malah menarik rilis terbaru yang mungkin masih memerlukan babel-polyfill.
Saya mengalami masalah yang sama dengan Travis CI: https://travis-ci.org/okonet/lint-staged/jobs/212179781
Tes berjalan baik-baik saja secara lokal tetapi tidak pada CI
Saya baru saja menabrak masalah ini!
@mpontus @okonet Anda dapat menggunakan jest@next
telah diperbaiki atau jika tidak, Anda perlu menginstal babel-polyfill
.
Dulu Jest memasukkan babel-polyfill
(dan masih melakukannya di 19.0.2), tetapi karena ini menyebabkan kebocoran memori, kami beralih menggunakan regenerator-runtime
saja, yang dikirimkan dengan deps transitif kami (jadi sejak Jest v20 jika Anda menggunakan npm >=3 atau yarn, Anda tidak perlu menginstal apa pun untuk dukungan async/menunggu).
Masalahnya adalah kami menghapus babel-polyfill
dari dokumen, tetapi lupa menyertakan perbedaan ini https://github.com/facebook/jest/pull/2755 di 19.0.2
dan tidak meluncurkan rilis yang layak sejak saat itu (hanya tag jest@next
).
Maaf atas ketidaknyamanannya!
@thymikee Bagaimana saya bisa menggunakan regenerator-runtime
seperti yang dijelaskan dalam dokumen bersama dengan transformasi?
Saya tidak menggunakan file .babelrc
di proyek saya dan memuat konfigurasi babel yang dibagikan untuk konfigurasi webpack dan jest seperti di bawah ini:
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)
Maaf untuk membangunkan masalah lama: Saya mengalami masalah yang sama dengan Jest 20.0.4, dan tidak dapat benar-benar memahami komentar ini. Dari apa yang saya lihat:
babel-preset-env
, tetapi contoh async/await menggunakan babel-plugin-transform-runtime sebagai gantinya. Manakah ketergantungan yang disarankan?okonet
, regeneratorRuntime muncul di CircleCI tetapi tidak secara lokal. Menjalankan skrip pengujian CI saya secara lokal dengan --runInBand
tidak menunjukkan bahwa itu masalahnya.regenerator-runtime
perlu diinstal secara langsung jika Anda menggunakan manajer paket yang lebih lama, yang, pada CI, mungkin.Saya menghadapi masalah yang sama, mengimpor babel-polyfill
langsung ke jest.init.js
(file pengaturan lelucon) memecahkan masalah bagi saya.
...
"setupFiles": [
"<rootDir>/jest.init.js"
],
...
/// jest.init.js
import Enzyme from 'enzyme';
import Adapter from 'enzyme-adapter-react-16';
import 'babel-polyfill';
Maaf untuk benjolan! Tapi saya ingin berbagi . Menambahkan ini di plugin umum saya berfungsi untuk saya:
[
"transform-runtime",
{
"helpers": false,
"polyfill": false,
"regenerator": true
}
]
Saya tidak tahu apakah ini cara terbaik untuk menanganinya.
Ini berhasil bagi saya untuk memperbaiki "ReferenceError: regeneratorRuntime tidak ditentukan" di Jest:
npm install --save-dev @babel/plugin-transform-runtime
Kemudian di .babelrc (selain opsi lain):
{
"env": {
"test": {
"plugins": ["@babel/plugin-transform-runtime"]
}
}
}
Saya menghadapi masalah yang sama, mengimpor
babel-polyfill
langsung kejest.init.js
(file pengaturan lelucon) memecahkan masalah bagi saya.... "setupFiles": [ "<rootDir>/jest.init.js" ], ...
/// jest.init.js import Enzyme from 'enzyme'; import Adapter from 'enzyme-adapter-react-16'; import 'babel-polyfill';
Saya mencoba mengimpor polyfill di jest.init.js
tetapi anehnya pengujian saya rusak. Saya tidak memiliki kesalahan generator yang tidak ditentukan tetapi saya memiliki banyak kesalahan yang sebelumnya tidak saya miliki dalam pengujian saya, seperti impor komponen yang hilang atau alat peraga yang hilang.
jest.conf.js
berisi baris berikut:
setupFiles: ['<rootDir>/test/unit/setup']
Karenanya saya harus mengimpor polyfill di setup.js
alih-alih jest.init.js
(yang tidak ada):
import Vue from 'vue'
import '@babel/polyfill';
Vue.config.productionTip = false
Vue.config.silent = true
_Kecuali untuk baris impor polyfill, 3 baris lainnya sudah ada di file saat saya membukanya._
Mengimpor polyfill di setup.js
berhasil saat mengimpornya di jest.init.js
tidak berhasil (saya mengubah jalur setupFiles).
Menambahkan target node saat ini berhasil bagi saya untuk memperbaiki "ReferenceError: regeneratorRuntime tidak ditentukan" di Jest:
{
"presets": [
[
"@babel/preset-env",
{
"targets": {
"node": "current"
}
}
]
]
}
Menambahkan target node saat ini berhasil bagi saya untuk memperbaiki "ReferenceError: regeneratorRuntime tidak ditentukan" di Jest:
{ "presets": [ [ "@babel/preset-env", { "targets": { "node": "current" } } ] ] }
Ini sebenarnya tidak akan membantu babelyfing, kode saya tidak akan dikompilasi dengan node target saat ini. Ini akan terlihat persis sama (ES6). Tes akan berjalan, bagus, tetapi tidak ada kode yang dikompilasi: P
Ini cuplikan package.json saya, ini berfungsi untuk saya sekarang.
"babel": {
"presets": [
[
"@babel/preset-env",
{
"targets": {
"node": "current"
}
}
],
"@babel/preset-react"
],
"plugins": [
"component-identification",
"@babel/plugin-proposal-class-properties",
[
"module-resolver",
{
"root": [
"./src"
]
}
]
]
},
Bagi saya itu tidak cukup untuk memiliki target preset-env yang ditentukan dalam konfigurasi umum.
Saya harus mendefinisikan target lagi secara eksplisit untuk node
bawah 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',
]
}
}
}
Satu-satunya hal yang harus saya lakukan adalah mendefinisikan target di babel seperti yang disebutkan oleh @AoDev. Tidak ada target tambahan di tempat lain.
Untuk mengimpor dan menentukan regenerator-runtime secara global, Anda melakukan:
require('regenerator-runtime/runtime');
Bagi mereka yang hanya ingin menambahkan hal yang diperlukan, dan tidak dipusingkan dengan menambahkan semua polyfill babel untuk lelucon.
Ini disebutkan dalam posting blog yang memperkenalkan Jest 24, jika orang melewatkannya: https://jestjs.io/blog/2019/01/25/jest-24-refreshing-polished-typescript-friendly#breaking -changes. Anda perlu mengkonfigurasi babel dengan benar, tidak perlu mengubah kode apa pun. Lihat komentar ini dari PR: https://github.com/facebook/jest/pull/7595#issuecomment -454486373
@ghengeveld Ini bekerja untuk saya, Terima kasih
Apa yang memecahkannya bagi saya, adalah tidak hanya menambahkan regenerator, tetapi juga runtime ke konfigurasi saya:
'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' } }],
],
},
},
},
},
},
@di sini tidak ada upaya di sini yang berhasil untuk saya, sepertinya saya masih mendapatkan Test suite gagal dijalankan
ReferenceError: regeneratorRuntime is not defined
Ini paket saya.json
"devDependencies": {
"@babel/inti": "^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",
"detoks": "^16.5.1",
.babelrc
setiap kali saya menambahkan sesuatu pada file ini, file aplikasi saya tidak akan berjalan. Saya harus menghapus file ini kembali agar aplikasi asli reaktif saya berjalan
Mengalami masalah yang sama. jest
segar (26.6.3), tes async biasa dan ini..
Untuk kerangka kerja yang mendefinisikan dirinya sebagai "menyenangkan" ini sebenarnya tidak.
Mengapa saya perlu repot tentang konfigurasi babel, plugin, dll.
Mengapa tidak bisa bekerja di luar kotak?
upd. Dalam kasus saya, saya sudah memiliki babel.config.js tetapi hilang
targets: {
node: 'current'
}
Komentar yang paling membantu
Ini berhasil bagi saya untuk memperbaiki "ReferenceError: regeneratorRuntime tidak ditentukan" di Jest:
Kemudian di .babelrc (selain opsi lain):