Gulp Mocha -运行测试参考错误:未定义regeneratorRuntime

aelbi1ox  于 2022-12-08  发布在  Gulp
关注(0)|答案(4)|浏览(244)

我正在尝试使用mocha运行async/await测试。项目架构在我开始工作之前就已经设置好了,我一直在尝试将其节点版本更新到8.9.4。该项目是一个同构应用程序,使用了babel,要运行gulp和webpack。为了运行测试,我们运行了一个gulp任务。项目中有两个.bablerc文件。一个在项目的根文件夹中,另一个在测试文件夹中。两者具有相同的配置:

{
  "presets": [
    ["env", {"exclude": ["transform-regenerator"]}],
    "react",
    "stage-1"
  ],
  "plugins": [
    "babel-plugin-root-import"
  ]
}

当我在本地运行应用程序时,不再返回任何错误。然而,当我使用gulp test:api运行测试时,我经常收到错误:ReferenceError: regeneratorRuntime is not defined
这是我在test文件夹中的gulp文件:

var gulp = require('gulp')
var gutil = require('gulp-util')
var gulpLoadPlugins = require('gulp-load-plugins')
var plugins = gulpLoadPlugins()
var babel = require('gulp-babel')

require('babel-register')({
    presets:["es2015", "react", "stage-1"]
});

// This is a cheap way of getting 'test:browser' to run fully before 'test:api' kicks in.
gulp.task('test', ['test:browser'], function(){
    return gulp.start('test:api')
});

gulp.task('test:api', function () {
    global.env = 'test'
    gulp.src(['test/unit-tests/server/**/*.spec.js'], {read: false})
        .pipe(plugins.mocha({reporter: 'spec'}))
        .once('error', function (error) {
            console.log(error)
            process.exit(1);
        })
        .once('end', function () {
            process.exit(0);
        })
});

gulp.task('default', ['test']);

任何关于为什么会发生这种情况的帮助都将不胜感激。

t9aqgxwy

t9aqgxwy1#

节点版本8已经支持async/await,所以你不需要Babel来转换它;实际上,您的root. babelrc包含此预设以排除会转换async/awaitregenerator(并引入对regeneratorRuntime的依赖):
["env", {"exclude": ["transform-regenerator"]}]
但是,在测试文件中,配置并没有指定这个预设,而是指定了"es2015"预设,其中 * 确实 * 包含了不需要的transform-regenerator(如https://babeljs.io/docs/plugins/preset-es2015/所示)。如果您更改这个预设以匹配根目录. babelrc中的预设,您将得到更一致的结果。

idv4meu8

idv4meu82#

奇怪的是,我在从v8.6.x升级到Node v8.10.0后遇到了这个问题。
require('babel-register')();
测试工具是Mocha、Chai、Enzyme + JSDOM。我在异步调用API时遇到了同样的问题,也是在通过sagas使用生成器函数时。添加babel-polyfill似乎解决了这个问题。
require('babel-register')(); require('babel-polyfill');
我想即使是巴别博士自己也提倡使用polyfill作为发电机之类的

不包括多边形填充使用需要多边形填充的功能(如生成器)时,必须单独包括多边形填充。

dgenwo3n

dgenwo3n3#

在Visual Studio Code中运行摩卡测试时遇到了同样的问题。

解决方案是在Visual Studio代码settings.json中添加必要的Babel插件:

"mocha.requires": [
    "babel-register",
    "babel-polyfill"
],
zour9fqk

zour9fqk4#

我之前在使用async/awaitmochanyc以及尝试运行 * coverage * 时遇到过这个错误。当利用mocha运行测试时从来没有问题,只是在利用nyc运行覆盖率时使用 * mocha * 测试。

11) Filesystem:removeDirectory
       Filesystem.removeDirectory()
         Should delete the directory "./tmp".:
     ReferenceError: regeneratorRuntime is not defined
      at Context.<anonymous> (build/tests/filesystem.js:153:67)
      at processImmediate (internal/timers.js:461:21)

您可以通过几种不同的方法解决此问题。

方法1-NPM的package.json

...
"nyc": {
    "require": [
      "@babel/register",
      "@babel/polyfill"
    ],
    ...
},
...

这取决于你使用的polyfill包。推荐使用作用域(*@babel *)变量:@babel/pollyfill。但是,如果您使用的是babel-polyfill,请确保它是您引用的内容。

方法2-直接导入

your-test-file.js(es6/7):

...
import '@babel/polyfill';
...


your-test-file.js(* 公用JS *):

...
require("@babel/polyfill");
...

不要把它赋给一个变量,只需要导入或请求包。同样,使用包名作为变量的来源。它包含了polyfill并解决了错误。
高温

相关问题