我试图让伊斯坦布尔和伊斯帕尔塔进行单元测试,而且我遇到了麻烦。
实际上,这是我的gulp文件任务:
gulp.task('pre-test', ['default'], function() {
return gulp.src('src/app/**/*.js')
.pipe(plumber())
.pipe(istanbul({
instrumenter: isparta.Instrumenter,
includeUntested: true
}))
.pipe(istanbul.hookRequire());
});
gulp.task('test', ['pre-test'], function() {
return gulp.src('src/test/**/*.js')
.pipe(mocha({reporter: 'spec'}))
.pipe(istanbul.writeReports({}));
});
当我开始吞咽"测试"任务,我有以下错误:
[08:34:17] Plumber found unhandled error:
Error in plugin 'gulp-istanbul'
Message:
Unable to parse C:\projects\nodejs\mon-notaire\src\app\core\logger\concrete\ConsoleLogger.js
Line 1: Unexpected token
[08:34:17] Finished 'pre-test' after 2.11 s
[08:34:17] Starting 'test'...
stream.js:94
throw er; // Unhandled stream error in pipe.
^
C:\projects\nodejs\mon-notaire\src\test\core\TestConfReader.js:1
(function (exports, require, module, __filename, __dirname) { import ConfReade
^^^^^^
SyntaxError: Unexpected reserved word
at exports.runInThisContext (vm.js:73:16)
at Module._compile (module.js:443:25)
at Object.Module._extensions..js (module.js:478:10)
at Object.Module._extensions.(anonymous function) [as .js] (C:\projects\nodejs\mon-notaire\node_modules\gulp-istanbul\node_modules\istanbul\lib\hook.js:109:37)
at Module.load (module.js:355:32)
at Function.Module._load (module.js:310:12)
at Module.require (module.js:365:17)
at require (module.js:384:17)
at C:\projects\nodejs\mon-notaire\node_modules\mocha\lib\mocha.js:192:27
at Array.forEach (native)
npm ERR! Test failed. See above for more details.
如何防止这些错误发生?
答案 0 :(得分:1)
您是否设置了.babelrc
?
如果您使用的是isparta
的最新版本,这取决于babel v6,那么您需要设置.babelrc
,如下所示。 (您还需要npm install --save-dev babel-preset-es2015
)
{
"presets": [
"es2015"
]
}
答案 1 :(得分:0)
这一行:
Message:
Unable to parse C:\projects\nodejs\mon-notaire\src\app\core\logger\concrete\ConsoleLogger.js
表示您在ConsoleLogger.js中的代码存在问题,因此您可能需要检查该文件。
这一行:
C:\projects\nodejs\mon-notaire\src\test\core\TestConfReader.js:1
(function (exports, require, module, __filename, __dirname) { import ConfReade
^^^^^^
SyntaxError: Unexpected reserved word
建议你使用的是ES6,但是你的gulp任务在运行之前没有将它转发到ES5,这就是你收到错误的原因。
我创建了一个yeoman generator,它正是为了这个目的而创建一个项目(在ES6中编写nodeJs项目),并使用istanbul和源代码映射包含代码覆盖。你可能想看一下。
否则,这是我的working gulpfile来自该生成器。
我使用istanbul,以及一个名为remap-istanbul的模块。
答案 2 :(得分:0)
错误消息表明您使用的是ES6,但gulp-istanbul
默认不支持。
当然,您可以编写函数来编译ES6代码,但考虑到您在这种情况下使用gulp
,恕我直言,您可以做的最简单的方法是使用gulp-babel-istanbul而不是{{ 1}},无需更改上面附带的代码。
gulp-istanbul
其余代码保持不变。
答案 3 :(得分:0)
来自gulp-istanbul github页面。
var isparta = require('isparta');
var istanbul = require('gulp-istanbul');
gulp.src('lib/**.js')
.pipe(istanbul({
// supports es6
instrumenter: isparta.Instrumenter
}));