`regeneratorRuntime` is not defined when running Jest test `regeneratorRuntime` is not defined when running Jest test reactjs reactjs

`regeneratorRuntime` is not defined when running Jest test


In case you are using a setupTests.js file you can import regenerator-runtime from there:

// setupTests.jsimport 'regenerator-runtime/runtime'import Enzyme from 'enzyme'import EnzymeAdapter from 'enzyme-adapter-react-16'Enzyme.configure({  adapter: new EnzymeAdapter()})

 
Then you can import setupTests.js to every test file or better yet, in your package.json just add setupFilesAfterEnv to the jest config:

// package.json{  ...  "dependencies": {    ...  },  "devDependencies": {    ...  },  "jest": {    "setupFilesAfterEnv": ["./pathToYour/setupTests.js"]   }}

 
Don't forget to install the regenerator-runtime package:

$ yarn add regenerator-runtime --dev

 
There is no need to import the complete babel-polyfill (or @babel/polyfill if Babel ≥ v.7.0.0) that btw has been deprecated in favor of directly including core-js/stable and regenerator-runtime/runtime.


While importing babel-polyfill into each test worked, the Updated jest docs (v24) suggests setting this in your babel config. If you do this you should no longer need to import babel-polyfill. (Personally, I was missing the targets option from my preset-env config).

// babel.config.jsmodule.exports = {  presets: [    [      '@babel/preset-env',      {        targets: {          node: 'current',        },      },    ],  ],};

A word to the wise: specifying targets will override any browserslist config you have defined (that babel would otherwise use). So in a web project, you'll probably want to create a dynamic babel.config.js that is "jest-aware" so that you're only adding targets when it's a test environment. See the section titled "Making your Babel config jest-aware" in the jest docs.


I used import "babel-polyfill" and it solved my problem.

Update 2020:This answer is outdated, babel-polyfill is deprecated. Look into the docs and the answer by Jero.