运行 Jest 测试时未定义 `regeneratorRuntime`
`regeneratorRuntime` is not defined when running Jest test
标题几乎解释了我所面临的问题。我正在尝试测试具有某种状态的 React
组件,并且我尝试将我的商店提供给该组件以获得它需要的东西。当我 运行 使用 Jest 测试组件时,出现以下错误:
ReferenceError: regeneratorRuntime is not defined
我通过一些阅读确定这是由于 babel-polyfill
或 regenerator-runtime
没有正确应用于 Jest。但是,我已经尝试安装这两个软件包和 re-running,结果没有任何变化。在阅读了 Jest Github 问题页面 (Remove auto-inclusion of babel-polyfill #2755) 后,我发现从版本 19 开始,Jest 并未自动包含 babel-polyfill
。我手动安装该软件包应该已经解决了这个问题,但事实并非如此。我已经包含了一些我认为相关的文件
.babelrc
:
{
"presets": ["es2015", "react", "stage-2"],
"env": {
"development": {
"plugins": [
["react-transform", {
"transforms": [{
"transform": "react-transform-hmr",
"imports": ["react"],
"locals": ["module"]
}]
}]
]
}
}
}
jest.config
:
{
"transform": {
"^.+\.(js|jsx)$": "<rootDir>/node_modules/webpack-babel-jest",
".*\.(vue)$": "<rootDir>/node_modules/jest-vue-preprocessor",
".*": "babel-jest"
},
"moduleNameMapper": {
"\.(jpg|jpeg|css|scss|png|gif|eot|otf|webp|svg|ttf|woff|woff2|mp4|webm|wav|mp3|m4a|aac|oga)$": "<rootDir>/__tests__/__mocks__/fileMock.js",
".*\.(vue)$": "vue/dist/vue.js"
},
"testPathIgnorePatterns": ["type_parser.spec.js",
"<rootDir>/__tests__/__mocks__/",
"__tests__/unit/core/util/type_parser.js",
"__tests__/GitlabLoader.test.js"
]
}
package.json
:
{
"name": "my_project",
"version": "0.2.0",
"description": "My Project",
"scripts": {
"clean:build": "node ./bin/clean.js createdir",
"build:html": "node ./bin/buildHtml.js",
"deployProduction": "node ./bin/deployProduction.js",
"start": "webpack-dev-server --config ./config/webpack.config.dev.js --hot --inline --progress",
"serve": "npm run deployProduction&& supervisor --watch ./production-copy src/js/server",
"prebuild": "npm run clean:build",
"postbuild": "node ./bin/postBuild.js",
"rebuild-win": "set BUILD_TYPE=preview& npm run prebuild & npm run build-win & npm run serve",
"build": "set BUILD_TYPE=final& npm run prebuild & npm run build-win",
"deploy": "npm run build & npm run serve",
"build-win": "set NODE_ENV=production & npm run element-build & npm run build-doc & npm run build:html & webpack -p --config ./config/webpack.config.prod.js --json > webpack.log.json & npm run postbuild",
"lint": "eslint config src/js/**/*.js",
"jscs": "jscs src/js/",
"test": "jest --no-cache --verbose --config=./__tests__/jest.config",
"test:watch": "npm run test -- --watch",
"element-init": "node node_modules/element-theme/bin/element-theme -i src/js/core/ui/element-theme.css",
"element-build": "node node_modules/element-theme/bin/element-theme -c src/js/core/ui/element-theme.css -o src/js/core/ui/element-theme ",
"build-doc": "node bin/buildDoc.js ",
"storybook": "start-storybook -p 9001 -c .storybook"
},
"repository": {
"type": "git",
"url": "my_url"
},
"license": "MIT",
"bugs": {
"url": "my_url"
},
"homepage": "my_homepage",
"dependencies": {
"autoprefixer": "^6.3.6",
"axios": "^0.11.1",
"babel-runtime": "^6.23.0",
"babel-standalone": "^6.10.3",
"bluebird": "^3.4.0",
"brace": "^0.8.0",
"browserify": "^13.0.1",
"chai": "^3.5.0",
"classnames": "2.2.3",
"cls-bluebird": "^1.0.1",
"codemirror": "^5.16.0",
"connect-history-api-fallback": "^1.3.0",
"continuation-local-storage": "^3.1.7",
"dateformat": "^1.0.12",
"diff": "^3.0.1",
"element-theme": "^0.4.0",
"element-ui": "^1.1.5",
"express-history-api-fallback": "^2.0.0",
"filedrop": "^2.0.0",
"fs-extra": "^0.30.0",
"history": "^2.0.2",
"humps": "^1.0.0",
"immutability-helper": "^2.1.1",
"isomorphic-fetch": "^2.2.1",
"json-loader": "^0.5.4",
"jszip": "^3.0.0",
"jszip-utils": "0.0.2",
"material-ui": "^0.16.7",
"materialize-css": "^0.97.6",
"mocha": "^2.5.3",
"moment": "^2.17.1",
"normalizr": "^1.0.0",
"raven-js": "^3.9.1",
"react": "^15.0.1",
"react-ace": "^3.5.0",
"react-addons-update": "^15.4.2",
"react-dom": "^15.0.1",
"react-redux": "^4.4.5",
"react-router": "^2.3.0",
"react-router-redux": "^4.0.2",
"redux": "^3.4.0",
"redux-logger": "^2.6.1",
"redux-saga": "^0.9.5",
"request": "^2.72.0",
"request-promise": "^3.0.0",
"reselect": "^2.5.4",
"save-as": "^0.1.7",
"showdown": "^1.4.2",
"three": "^0.79.0",
"url-pattern": "^1.0.3",
"vue": "^2.0.5",
"vue-easy-slider": "^1.4.0",
"vue-loader": "^9.8.1",
"vue-router": "^2.0.1",
"vue-slider-component": "^2.0.4",
"walk": "^2.3.9"
},
"devDependencies": {
"@kadira/storybook": "^2.35.3",
"babel-core": "^6.7.6",
"babel-eslint": "^6.1.0",
"babel-jest": "^18.0.0",
"babel-loader": "^6.0.2",
"babel-plugin-react-transform": "^2.0.2",
"babel-polyfill": "^6.23.0",
"babel-preset-es2015": "^6.22.0",
"babel-preset-es2016": "^6.22.0",
"babel-preset-react": "^6.23.0",
"babel-preset-stage-2": "^6.5.0",
"babel-register": "^6.7.2",
"chai": "3.5.0",
"chai-jquery": "2.0.0",
"cheerio": "0.20.0",
"colors": "1.1.2",
"concurrently": "^2.0.0",
"copy-webpack-plugin": "2.1.1",
"css-loader": "0.23.1",
"element-theme-default": "^1.1.5",
"enzyme": "^2.7.1",
"eslint": "^2.13.1",
"eslint-config-airbnb": "^9.0.1",
"eslint-plugin-import": "^2.2.0",
"eslint-plugin-jsx-a11y": "^4.0.0",
"eslint-plugin-react": "^5.2.2",
"express": "^4.13.4",
"extract-text-webpack-plugin": "1.0.1",
"file-loader": "0.8.5",
"identity-obj-proxy": "^3.0.0",
"jest": "^19.0.2",
"jest-cli": "^18.1.0",
"jest-css-modules": "^1.1.0",
"jest-enzyme": "^2.1.2",
"jest-vue-preprocessor": "^0.1.2",
"jquery": "2.2.3",
"jscs": "3.0.3",
"jsdoc-to-markdown": "^2.0.0",
"jsdom": "8.4.0",
"json-loader": "^0.5.4",
"mocha": "^2.4.5",
"ncp": "^2.0.0",
"node-sass": "3.7.0",
"postcss-loader": "0.8.2",
"react-addons-test-utils": "^15.4.2",
"react-hot-loader": "1.3.0",
"react-test-renderer": "^15.4.2",
"react-transform-hmr": "^1.0.4",
"redux-devtools": "^3.3.1",
"redux-devtools-dock-monitor": "^1.1.1",
"redux-devtools-log-monitor": "^1.0.11",
"regenerator-runtime": "^0.10.3",
"remotedev": "^0.1.2",
"rimraf": "^2.5.2",
"sass-loader": "3.2.0",
"storybook-addon-material-ui": "^0.7.6",
"style-loader": "0.13.1",
"url-loader": "0.5.7",
"vueify": "^9.4.0",
"webpack": "^1.13.0",
"webpack-babel-jest": "^1.0.4",
"webpack-dev-middleware": "^1.6.1",
"webpack-dev-server": "^1.16.3",
"webpack-hot-middleware": "^2.10.0"
}
}
我用了import "babel-polyfill"
,它解决了我的问题。
2020 年更新:
此答案已过时,babel-polyfill
已弃用。查看 the docs and .
虽然将 babel-polyfill
导入每个测试都有效,但 Updated jest docs (v24) 建议在您的 babel 配置中设置它。如果这样做,您将不再需要导入 babel-polyfill
。 (就个人而言,我的 preset-env
配置中缺少 targets
选项)。
// babel.config.js
module.exports = {
presets: [
[
'@babel/preset-env',
{
targets: {
node: 'current',
},
},
],
],
};
明智的话:指定 targets
将覆盖您定义的任何 browserslist
配置(否则 babel 会使用)。因此,在 Web 项目中,您可能希望创建一个 "jest-aware" 的动态 babel.config.js
,以便仅在测试环境中添加 targets
。请参阅 jest docs.
中标题为 "Making your Babel config jest-aware" 的部分
如果您使用的是 setupTests.js 文件,您可以从那里导入 regenerator-runtime:
// setupTests.js
import 'regenerator-runtime/runtime'
import Enzyme from 'enzyme'
import EnzymeAdapter from 'enzyme-adapter-react-16'
Enzyme.configure({
adapter: new EnzymeAdapter()
})
然后你可以导入 setupTests.js 到每个测试文件或者更好的是,在你的 package.json 中添加 setupFilesAfterEnv 到开玩笑的配置:
// package.json
{
...
"dependencies": {
...
},
"devDependencies": {
...
},
"jest": {
"setupFilesAfterEnv": ["./pathToYour/setupTests.js"]
}
}
不要忘记安装 regenerator-runtime 包:
$ yarn add regenerator-runtime --dev
不需要导入完整的 babel-polyfill(或者 @babel/polyfill 如果 Babel ≥ v.7.0.0),顺便说一句 deprecated 支持直接包含 core-js/stable 和 regenerator-runtime/runtime.
截至 2019 年 10 月 2 日的最新解决方案是在您的 setupTests.js
文件中导入以下内容。
import 'core-js/stable';
import 'regenerator-runtime/runtime';
babel-polyfill
已弃用。
已安装 babel-core@bridge
且 @babel/core@7
:
我通过添加插件 @babel/plugin-transform-runtime
并将以下内容传递给我的 babel 配置解决了这个问题:
{
// ...
env: {
test: {
// ...
plugins: [
'@babel/plugin-transform-runtime'
]
}
}
}
编辑:或者,因为other people commented你也可以只添加一个选项 到 @babel/preset-env
的配置,它应该可以工作:
{
"presets": [
[
"@babel/preset-env",
{
"targets": {
"node": "current"
}
}
]
]
}
对于在 2020 年遇到此问题的任何人,在仔细阅读 SO 之后,这是我发现其他答案中缺少的信息。
我的项目是按照 Babel 7.9.0 setup 中的建议配置的。
在完成所有这些步骤并将 '@babel/register'
导入到我的两个入口点的顶部之后,ReferenceError 仍然存在。从开玩笑的文档中,我发现了这个,它解决了我的问题:
// babel.config.js
module.exports = {
presets: [
[
'@babel/preset-env',
{
targets: {
node: 'current',
},
},
],
],
};
跟进 Jero 的回答。如果您使用的是 npm,则可以在测试文件中执行 npm i -D regenerator-runtime
然后 import 'regenerator-runtime/runtime';
。
我正在 Laravel 混合使用 Vuejs、Vue Jest,这对我有用
import 'regenerator-runtime/runtime'
import { mount } from '@vue/test-utils'
import App from '../App';
// eslint-disable-next-line no-undef
test('it works', () => {
// eslint-disable-next-line no-undef
expect(1 + 1).toBe(2);
});
// eslint-disable-next-line no-undef
test('should mount without crashing', () => {
const wrapper = mount(App);
// eslint-disable-next-line no-undef
expect(wrapper).toMatchSnapshot();
});
如果有人在搜索错误消息时到达这里,但没有使用 Babel,那么可能是项目目录中存在一个旧的 Babel 配置文件,因为 according to Jest documentation:
Making your Babel config jest-aware
[...]
Jest will automatically transform files if a babel configuration
exists in your project. To avoid this behavior, you can explicitly
reset the transform configuration option:
// jest.config.js
module.exports = {
transform: {},
};
我在 NodeJS 中使用 Supertest 测试我的端点时遇到了这个问题:
问题是
"Test suite failed to run
ReferenceError: regeneratorRuntime is not defined "
解决方案是:
我已经安装了:
npm 安装--save-dev @babel/plugin-transform-runtime
然后在 .babelrc 中(除了其他选项):
我已经添加了
{
"env": {
"test": {
"plugins": ["@babel/plugin-transform-runtime"]
}
}
}
为什么
根据 Jest 官方文档 regenerator-runtime
is not longer injected 自动执行。
Jest no longer automatically injects regenerator-runtime - if you get errors concerning it, make sure to configure Babel to properly transpile async functions, using e.g. @babel/preset-env. Related PR.
如何
查看 PR a solution 可用:
安装 @babel/plugin-transform-runtime
作为开发依赖项
npm install --save-dev @babel/plugin-transform-runtime
安装 @babel/runtime
作为依赖项
npm install @babel/runtime
然后将其添加到您的 babel 配置中 (babel.config.js
):
{
"plugins": [
[ "@babel/plugin-transform-runtime", { "regenerator": true } ]
]
}
标题几乎解释了我所面临的问题。我正在尝试测试具有某种状态的 React
组件,并且我尝试将我的商店提供给该组件以获得它需要的东西。当我 运行 使用 Jest 测试组件时,出现以下错误:
ReferenceError: regeneratorRuntime is not defined
我通过一些阅读确定这是由于 babel-polyfill
或 regenerator-runtime
没有正确应用于 Jest。但是,我已经尝试安装这两个软件包和 re-running,结果没有任何变化。在阅读了 Jest Github 问题页面 (Remove auto-inclusion of babel-polyfill #2755) 后,我发现从版本 19 开始,Jest 并未自动包含 babel-polyfill
。我手动安装该软件包应该已经解决了这个问题,但事实并非如此。我已经包含了一些我认为相关的文件
.babelrc
:
{
"presets": ["es2015", "react", "stage-2"],
"env": {
"development": {
"plugins": [
["react-transform", {
"transforms": [{
"transform": "react-transform-hmr",
"imports": ["react"],
"locals": ["module"]
}]
}]
]
}
}
}
jest.config
:
{
"transform": {
"^.+\.(js|jsx)$": "<rootDir>/node_modules/webpack-babel-jest",
".*\.(vue)$": "<rootDir>/node_modules/jest-vue-preprocessor",
".*": "babel-jest"
},
"moduleNameMapper": {
"\.(jpg|jpeg|css|scss|png|gif|eot|otf|webp|svg|ttf|woff|woff2|mp4|webm|wav|mp3|m4a|aac|oga)$": "<rootDir>/__tests__/__mocks__/fileMock.js",
".*\.(vue)$": "vue/dist/vue.js"
},
"testPathIgnorePatterns": ["type_parser.spec.js",
"<rootDir>/__tests__/__mocks__/",
"__tests__/unit/core/util/type_parser.js",
"__tests__/GitlabLoader.test.js"
]
}
package.json
:
{
"name": "my_project",
"version": "0.2.0",
"description": "My Project",
"scripts": {
"clean:build": "node ./bin/clean.js createdir",
"build:html": "node ./bin/buildHtml.js",
"deployProduction": "node ./bin/deployProduction.js",
"start": "webpack-dev-server --config ./config/webpack.config.dev.js --hot --inline --progress",
"serve": "npm run deployProduction&& supervisor --watch ./production-copy src/js/server",
"prebuild": "npm run clean:build",
"postbuild": "node ./bin/postBuild.js",
"rebuild-win": "set BUILD_TYPE=preview& npm run prebuild & npm run build-win & npm run serve",
"build": "set BUILD_TYPE=final& npm run prebuild & npm run build-win",
"deploy": "npm run build & npm run serve",
"build-win": "set NODE_ENV=production & npm run element-build & npm run build-doc & npm run build:html & webpack -p --config ./config/webpack.config.prod.js --json > webpack.log.json & npm run postbuild",
"lint": "eslint config src/js/**/*.js",
"jscs": "jscs src/js/",
"test": "jest --no-cache --verbose --config=./__tests__/jest.config",
"test:watch": "npm run test -- --watch",
"element-init": "node node_modules/element-theme/bin/element-theme -i src/js/core/ui/element-theme.css",
"element-build": "node node_modules/element-theme/bin/element-theme -c src/js/core/ui/element-theme.css -o src/js/core/ui/element-theme ",
"build-doc": "node bin/buildDoc.js ",
"storybook": "start-storybook -p 9001 -c .storybook"
},
"repository": {
"type": "git",
"url": "my_url"
},
"license": "MIT",
"bugs": {
"url": "my_url"
},
"homepage": "my_homepage",
"dependencies": {
"autoprefixer": "^6.3.6",
"axios": "^0.11.1",
"babel-runtime": "^6.23.0",
"babel-standalone": "^6.10.3",
"bluebird": "^3.4.0",
"brace": "^0.8.0",
"browserify": "^13.0.1",
"chai": "^3.5.0",
"classnames": "2.2.3",
"cls-bluebird": "^1.0.1",
"codemirror": "^5.16.0",
"connect-history-api-fallback": "^1.3.0",
"continuation-local-storage": "^3.1.7",
"dateformat": "^1.0.12",
"diff": "^3.0.1",
"element-theme": "^0.4.0",
"element-ui": "^1.1.5",
"express-history-api-fallback": "^2.0.0",
"filedrop": "^2.0.0",
"fs-extra": "^0.30.0",
"history": "^2.0.2",
"humps": "^1.0.0",
"immutability-helper": "^2.1.1",
"isomorphic-fetch": "^2.2.1",
"json-loader": "^0.5.4",
"jszip": "^3.0.0",
"jszip-utils": "0.0.2",
"material-ui": "^0.16.7",
"materialize-css": "^0.97.6",
"mocha": "^2.5.3",
"moment": "^2.17.1",
"normalizr": "^1.0.0",
"raven-js": "^3.9.1",
"react": "^15.0.1",
"react-ace": "^3.5.0",
"react-addons-update": "^15.4.2",
"react-dom": "^15.0.1",
"react-redux": "^4.4.5",
"react-router": "^2.3.0",
"react-router-redux": "^4.0.2",
"redux": "^3.4.0",
"redux-logger": "^2.6.1",
"redux-saga": "^0.9.5",
"request": "^2.72.0",
"request-promise": "^3.0.0",
"reselect": "^2.5.4",
"save-as": "^0.1.7",
"showdown": "^1.4.2",
"three": "^0.79.0",
"url-pattern": "^1.0.3",
"vue": "^2.0.5",
"vue-easy-slider": "^1.4.0",
"vue-loader": "^9.8.1",
"vue-router": "^2.0.1",
"vue-slider-component": "^2.0.4",
"walk": "^2.3.9"
},
"devDependencies": {
"@kadira/storybook": "^2.35.3",
"babel-core": "^6.7.6",
"babel-eslint": "^6.1.0",
"babel-jest": "^18.0.0",
"babel-loader": "^6.0.2",
"babel-plugin-react-transform": "^2.0.2",
"babel-polyfill": "^6.23.0",
"babel-preset-es2015": "^6.22.0",
"babel-preset-es2016": "^6.22.0",
"babel-preset-react": "^6.23.0",
"babel-preset-stage-2": "^6.5.0",
"babel-register": "^6.7.2",
"chai": "3.5.0",
"chai-jquery": "2.0.0",
"cheerio": "0.20.0",
"colors": "1.1.2",
"concurrently": "^2.0.0",
"copy-webpack-plugin": "2.1.1",
"css-loader": "0.23.1",
"element-theme-default": "^1.1.5",
"enzyme": "^2.7.1",
"eslint": "^2.13.1",
"eslint-config-airbnb": "^9.0.1",
"eslint-plugin-import": "^2.2.0",
"eslint-plugin-jsx-a11y": "^4.0.0",
"eslint-plugin-react": "^5.2.2",
"express": "^4.13.4",
"extract-text-webpack-plugin": "1.0.1",
"file-loader": "0.8.5",
"identity-obj-proxy": "^3.0.0",
"jest": "^19.0.2",
"jest-cli": "^18.1.0",
"jest-css-modules": "^1.1.0",
"jest-enzyme": "^2.1.2",
"jest-vue-preprocessor": "^0.1.2",
"jquery": "2.2.3",
"jscs": "3.0.3",
"jsdoc-to-markdown": "^2.0.0",
"jsdom": "8.4.0",
"json-loader": "^0.5.4",
"mocha": "^2.4.5",
"ncp": "^2.0.0",
"node-sass": "3.7.0",
"postcss-loader": "0.8.2",
"react-addons-test-utils": "^15.4.2",
"react-hot-loader": "1.3.0",
"react-test-renderer": "^15.4.2",
"react-transform-hmr": "^1.0.4",
"redux-devtools": "^3.3.1",
"redux-devtools-dock-monitor": "^1.1.1",
"redux-devtools-log-monitor": "^1.0.11",
"regenerator-runtime": "^0.10.3",
"remotedev": "^0.1.2",
"rimraf": "^2.5.2",
"sass-loader": "3.2.0",
"storybook-addon-material-ui": "^0.7.6",
"style-loader": "0.13.1",
"url-loader": "0.5.7",
"vueify": "^9.4.0",
"webpack": "^1.13.0",
"webpack-babel-jest": "^1.0.4",
"webpack-dev-middleware": "^1.6.1",
"webpack-dev-server": "^1.16.3",
"webpack-hot-middleware": "^2.10.0"
}
}
我用了import "babel-polyfill"
,它解决了我的问题。
2020 年更新:
此答案已过时,babel-polyfill
已弃用。查看 the docs and
虽然将 babel-polyfill
导入每个测试都有效,但 Updated jest docs (v24) 建议在您的 babel 配置中设置它。如果这样做,您将不再需要导入 babel-polyfill
。 (就个人而言,我的 preset-env
配置中缺少 targets
选项)。
// babel.config.js
module.exports = {
presets: [
[
'@babel/preset-env',
{
targets: {
node: 'current',
},
},
],
],
};
明智的话:指定 targets
将覆盖您定义的任何 browserslist
配置(否则 babel 会使用)。因此,在 Web 项目中,您可能希望创建一个 "jest-aware" 的动态 babel.config.js
,以便仅在测试环境中添加 targets
。请参阅 jest docs.
如果您使用的是 setupTests.js 文件,您可以从那里导入 regenerator-runtime:
// setupTests.js
import 'regenerator-runtime/runtime'
import Enzyme from 'enzyme'
import EnzymeAdapter from 'enzyme-adapter-react-16'
Enzyme.configure({
adapter: new EnzymeAdapter()
})
然后你可以导入 setupTests.js 到每个测试文件或者更好的是,在你的 package.json 中添加 setupFilesAfterEnv 到开玩笑的配置:
// package.json
{
...
"dependencies": {
...
},
"devDependencies": {
...
},
"jest": {
"setupFilesAfterEnv": ["./pathToYour/setupTests.js"]
}
}
不要忘记安装 regenerator-runtime 包:
$ yarn add regenerator-runtime --dev
不需要导入完整的 babel-polyfill(或者 @babel/polyfill 如果 Babel ≥ v.7.0.0),顺便说一句 deprecated 支持直接包含 core-js/stable 和 regenerator-runtime/runtime.
截至 2019 年 10 月 2 日的最新解决方案是在您的 setupTests.js
文件中导入以下内容。
import 'core-js/stable';
import 'regenerator-runtime/runtime';
babel-polyfill
已弃用。
已安装 babel-core@bridge
且 @babel/core@7
:
我通过添加插件 @babel/plugin-transform-runtime
并将以下内容传递给我的 babel 配置解决了这个问题:
{
// ...
env: {
test: {
// ...
plugins: [
'@babel/plugin-transform-runtime'
]
}
}
}
编辑:或者,因为other people commented你也可以只添加一个选项 到 @babel/preset-env
的配置,它应该可以工作:
{
"presets": [
[
"@babel/preset-env",
{
"targets": {
"node": "current"
}
}
]
]
}
对于在 2020 年遇到此问题的任何人,在仔细阅读 SO 之后,这是我发现其他答案中缺少的信息。
我的项目是按照 Babel 7.9.0 setup 中的建议配置的。
在完成所有这些步骤并将 '@babel/register'
导入到我的两个入口点的顶部之后,ReferenceError 仍然存在。从开玩笑的文档中,我发现了这个,它解决了我的问题:
// babel.config.js
module.exports = {
presets: [
[
'@babel/preset-env',
{
targets: {
node: 'current',
},
},
],
],
};
跟进 Jero 的回答。如果您使用的是 npm,则可以在测试文件中执行 npm i -D regenerator-runtime
然后 import 'regenerator-runtime/runtime';
。
我正在 Laravel 混合使用 Vuejs、Vue Jest,这对我有用
import 'regenerator-runtime/runtime'
import { mount } from '@vue/test-utils'
import App from '../App';
// eslint-disable-next-line no-undef
test('it works', () => {
// eslint-disable-next-line no-undef
expect(1 + 1).toBe(2);
});
// eslint-disable-next-line no-undef
test('should mount without crashing', () => {
const wrapper = mount(App);
// eslint-disable-next-line no-undef
expect(wrapper).toMatchSnapshot();
});
如果有人在搜索错误消息时到达这里,但没有使用 Babel,那么可能是项目目录中存在一个旧的 Babel 配置文件,因为 according to Jest documentation:
Making your Babel config jest-aware
[...]
Jest will automatically transform files if a babel configuration exists in your project. To avoid this behavior, you can explicitly reset the transform configuration option:// jest.config.js module.exports = { transform: {}, };
我在 NodeJS 中使用 Supertest 测试我的端点时遇到了这个问题:
问题是
"Test suite failed to run
ReferenceError: regeneratorRuntime is not defined "
解决方案是:
我已经安装了:
npm 安装--save-dev @babel/plugin-transform-runtime
然后在 .babelrc 中(除了其他选项):
我已经添加了
{
"env": {
"test": {
"plugins": ["@babel/plugin-transform-runtime"]
}
}
}
为什么
根据 Jest 官方文档 regenerator-runtime
is not longer injected 自动执行。
Jest no longer automatically injects regenerator-runtime - if you get errors concerning it, make sure to configure Babel to properly transpile async functions, using e.g. @babel/preset-env. Related PR.
如何
查看 PR a solution 可用:
安装 @babel/plugin-transform-runtime
作为开发依赖项
npm install --save-dev @babel/plugin-transform-runtime
安装 @babel/runtime
作为依赖项
npm install @babel/runtime
然后将其添加到您的 babel 配置中 (babel.config.js
):
{
"plugins": [
[ "@babel/plugin-transform-runtime", { "regenerator": true } ]
]
}