运行 没有配置文件的 JS 业力测试

Run karma test from JS without a config file

有什么办法可以 运行 karma 而不是指定静态配置文件而是给它一个配置对象吗?

理想的场景应该是这样的:

const karmaConfig = {...};

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

有什么办法吗?

其背后的原因是我希望有不同的测试 运行s 来处理不同的文件,我在其他地方的通用配置文件中指定了这些文件。

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

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();
});