0

我正在尝试执行 gulp 任务以在升级到 Angular 6 后运行 Karma。按照gulp-karma自述文件中的示例,

var gulp = require('gulp');
var Server = require('karma').Server;

/**
 * Run test once and exit
 */
gulp.task('test', function (done) {
  new Server({
    configFile: __dirname + '/karma.conf.js',
    singleRun: true
  }, done).start();
});

我在输出中看到这个错误:

错误:'@angular-devkit/build-angular/plugins/karma' karma 插件旨在从 Angular CLI 中使用,并且在它之外无法正常工作。

似乎 gulp 需要通过 angular-cli 运行业力,或者提供给任务的选项和覆盖需要更改。

我在用着:

  • "@angular/cli": "~6.0.8"
  • “业力”:“^1.7.1”
  • “gulp-util”:“^3.0.8”

有人可以提供正确的初始化以使 Karma 测试在这种情况下工作吗?

4

1 回答 1

0

鉴于 Angular 6 的更新,以下内容将起作用。您需要调用 child_process().exec 来执行 ng 测试。这将允许您在 angular-cli 框架内运行测试。可能还需要提供其他参数,例如增加 maxBuffer 大小以避免在缓冲区溢出时出现错误:stderr maxBuffer exceeded。如果您将此用于 CI,那么您还需要使用 Chrome 的无头模式来避免浏览器输出。

gulpfile.js

var gulp = require('gulp');
var exec = require('child_process').exec;

gulp.task('default', function (cb) {
    let maxBuffer = 1000 * 1024    // The default is 200 * 1024
    let options = {
        maxBuffer: maxBuffer
    }

    exec('ng test --watch=false --browsers=ChromeHeadless', options, function (err, stdout, stderr) {
        console.log(stdout);
        console.log(stderr);
        cb(err);
    });
})

karma.conf.js - 无头模式

customLaunchers: {
  ...
  ChromeHeadless: {
    base: 'Chrome',
    flags: [
      '--headless',
      '--disable-gpu',
      '--remote-debugging-port=9222'
    ],
  }
}

最后,还有一个替代方案,它使用 child_process.spawn() 来调用 ng test 而不是 exec()。但是,当 gulp-cli 是全局安装而不是本地安装时,我遇到了错误。这也应该允许您解决超出 maxBuffer 的错误。

于 2018-08-13T21:18:18.990 回答