Karma配置 - 包括其他配置文件

时间:2017-11-13 14:43:06

标签: karma-runner karma-webpack

我还没有看到任何相关内容,但我想知道是否有可能在单个Karma运行中包含多个karma-conf.js文件?基本上,我正在考虑为CI配置带覆盖和tslint的配置,以及仅使用本地开发测试的配置。

2 个答案:

答案 0 :(得分:1)

这是一个引用主文件karma.conf.child.js的子文件karma.conf.js的简单示例。子文件导入主要设置,进行更改,然后再次导出。您也可以将此import-change-export模式与其他工具一起使用。

在此示例中,我更改了设置以在TeamCity CI服务器上启用报告:

// This is karma.conf.child.js

// import settings from default config file
var properties = null;
var originalConfigFn = require('./karma.conf.js');
originalConfigFn({ set: function(arg) { properties = arg; } });

// alter settings here:
properties.colors = false;
properties.singleRun = true;
properties.autoWatch = false;
properties.browsers = ['ChromeHeadless'];
properties.reporters.push('teamcity');
properties.coverageIstanbulReporter.reports.push('teamcity');

// export settings
module.exports = function (config) {
  config.set(properties);
};

要运行,请根据说明文件调用子配置文件:

karma start ./src/karma.conf.child.js

我正在使用Angular CLI,所以我像这样调用ng test

ng test --karma-config=./src/karma.conf.child.js

答案 1 :(得分:0)

据我所知,Karma只接受单个配置文件作为输入,可以指定为命令行参数或作为karma服务器的构造函数选项的一部分。

也许gulp为您提供了另一种方法。我使用gulp文件包含多个任务。每个任务都能够覆盖karma-conf.js中给出的默认配置,例如

console.log('Importing gulp dependencies ...');

var gulp = require('gulp');
var karma = require('karma');
var KarmaServerConstructor = karma.Server;
var karmaStopper = karma.stopper;
var watch = require('gulp-watch');
var commandLineArguments = require('yargs').argv;
var svn = require('gulp-svn');
var exec = require('child_process').exec;
var fs = require('fs');
var os = require('os');
var open = require('gulp-open');
var collect = require('gulp-collect');

console.log('Imports finished.');

gulp.task('watch', function() {

  return gulp //
    .watch('MyTestProject/App/**/*.spec.js', handleFileChanged)
    .on('error', handleGulpError);

  function handleFileChanged(vinyl) {

    var pathForChangedFile = './' + vinyl.replace(/\\/g, '/');

    var karmaOptions = {
      configFile: __dirname + '/karma.conf.js',
      action: 'start',
      browsers: ['PhantomJS'],
      singleRun: true,
      files: firstKarmaFiles //
        .concat([
          {
            pattern: pathForChangedFile,
            included: false
          }
        ]) //
        .concat(lastKarmaFiles)
    };

    var karmaServer = new KarmaServerConstructor(karmaOptions);
    karmaServer.start();
    }    
});