Gulp Node.js Стамбул Испарта

Я пытаюсь получить покрытие модульных тестов в Стамбуле и Испарте, и у меня возникли некоторые проблемы.

На самом деле, вот мои задачи файла 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({}));
});

Когда я запускаю тестовое задание gulp, у меня появляются следующие ошибки:

[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.

Как я могу предотвратить возникновение этих ошибок?

3 ответа

Вы настроили .babelrc?

Если вы используете последнюю версию isparta, который зависит от Babel v6, то вам нужно настроить .babelrc как следующее. (Вам также нужно сделать npm install --save-dev babel-preset-es2015)

{
  "presets": [
    "es2015"
  ]
}

Со страницы gulp-istanbul github.

var isparta = require('isparta');
var istanbul = require('gulp-istanbul');

gulp.src('lib/**.js')
  .pipe(istanbul({
    // supports es6
    instrumenter: isparta.Instrumenter
  }));

Эта строка:

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, который создает проект именно для этой цели (написание проектов nodeJs в ES6) и включает покрытие кода с использованием istanbul с отображением исходного кода. Возможно, вы захотите взглянуть на это.

В противном случае, вот мой рабочий gulpfile от этого генератора.

Я использую Стамбул вместе с модулем под названием remap-istanbul.

Сообщение об ошибке указывает, что вы используете ES6, но gulp-istanbul не поддерживает его по умолчанию.

Конечно, вы можете написать свои функции для компиляции кодов ES6, но, учитывая, что вы используете gulp в этом случае ИМХО самый простой способ сделать это - использовать gulp-babel-istanbul вместо gulp-istanbulНет необходимости менять код, прикрепленный выше.

import istanbul from 'gulp-babel-istanbul'

И остальная часть кода остается прежней.

Другие вопросы по тегам