Jest: Kesalahan dalam Async Contoh: ReferenceError: regeneratorRuntime tidak ditentukan

Dibuat pada 12 Mar 2017  ·  21Komentar  ·  Sumber: facebook/jest

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

Komentar yang paling membantu

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

Semua 21 komentar

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:

  • Dokumentasi async/await menyarankan untuk menggunakan babel-preset-env , tetapi contoh async/await menggunakan babel-plugin-transform-runtime sebagai gantinya. Manakah ketergantungan yang disarankan?
  • Seperti okonet , regeneratorRuntime muncul di CircleCI tetapi tidak secara lokal. Menjalankan skrip pengujian CI saya secara lokal dengan --runInBand tidak menunjukkan bahwa itu masalahnya.
  • Sepertinya akar masalahnya adalah 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 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';

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

Apakah halaman ini membantu?
0 / 5 - 0 peringkat