我正在尝试使用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']);
任何关于为什么会发生这种情况的帮助都将不胜感激。
4条答案
按热度按时间t9aqgxwy1#
节点版本8已经支持
async/await
,所以你不需要Babel来转换它;实际上,您的root. babelrc包含此预设以排除会转换async/await
的regenerator
(并引入对regeneratorRuntime的依赖):["env", {"exclude": ["transform-regenerator"]}]
但是,在测试文件中,配置并没有指定这个预设,而是指定了
"es2015"
预设,其中 * 确实 * 包含了不需要的transform-regenerator
(如https://babeljs.io/docs/plugins/preset-es2015/所示)。如果您更改这个预设以匹配根目录. babelrc中的预设,您将得到更一致的结果。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作为发电机之类的
不包括多边形填充使用需要多边形填充的功能(如生成器)时,必须单独包括多边形填充。
dgenwo3n3#
在Visual Studio Code中运行摩卡测试时遇到了同样的问题。
解决方案是在Visual Studio代码
settings.json
中添加必要的Babel插件:zour9fqk4#
我之前在使用async/await、mocha、nyc以及尝试运行 * coverage * 时遇到过这个错误。当利用mocha运行测试时从来没有问题,只是在利用nyc运行覆盖率时使用 * mocha * 测试。
您可以通过几种不同的方法解决此问题。
方法1-NPM的
package.json
:这取决于你使用的polyfill包。推荐使用作用域(*@babel *)变量:
@babel/pollyfill
。但是,如果您使用的是babel-polyfill
,请确保它是您引用的内容。方法2-直接导入
your-test-file.js
(es6/7):或
your-test-file.js
(* 公用JS *):不要把它赋给一个变量,只需要导入或请求包。同样,使用包名作为变量的来源。它包含了polyfill并解决了错误。
高温