在没有配置文件的情况下从JS运行karma测试

时间:2016-11-11 11:21:12

标签: javascript karma-runner gulp-karma

有没有什么方法可以在没有指定静态配置文件的情况下运行业力而是给它一个配置对象?

理想情况如下:

const karmaConfig = {...};

gulp.task('test', function (done) {
  new Server({
    config: karmaConfig,
    singleRun: true
  }, done).start();
});

有没有办法做到这一点?

背后的原因是我希望有不同的测试运行处理不同的文件,我在其他地方的一般配置文件中指定。

1 个答案:

答案 0 :(得分:1)

我找到的解决方案是使用临时配置文件。 代码如下:

const tmp = require('tmp');
const fs = require('fs');
const gulp = require('gulp');

function createConfigFileContent(configurationObject) {
  return `
  module.exports = function karmaConfig(config) {
    const conf = ${JSON.stringify(configurationObject)};
    conf.logLevel = config.LOG_INFO;

    return config.set(conf);
  };
  `;
}

function createConfigObject(testFiles) {
  const files = testFiles.map(f => ({ pattern: f, included: true }));

  return {
    basePath: process.cwd(), // project root
    frameworks: ['jasmine'],
    files,
    exclude: [],
    preprocessors: {},
    reporters: ['progress'],
    port: 9876,
    colors: true,
    autoWatch: false,
    browsers: ['Chrome'],
    singleRun: true,
    concurrency: Infinity,
  };
}

function generateConfig(runner, testFiles) {
  const config = createConfigObject(runner, testFiles);

  return createConfigFileContent(config);
}


gulp.task('karma', done => {
  // Create temporary configuration file
  const config = tmp.fileSync();

  // Populate it with config to run our files
  fs.writeFileSync(config.name, generateConfig(FILESARRAY));

  // Run karma
  return new KarmaServer({
      configFile: config.name,
      singleRun: true,
    },
    function cleanUp() {
      // Erase temporary config and finish task
      config.removeCallback();
      done();
    }).start();
});