有没有什么方法可以在没有指定静态配置文件的情况下运行业力而是给它一个配置对象?
理想情况如下:
const karmaConfig = {...};
gulp.task('test', function (done) {
new Server({
config: karmaConfig,
singleRun: true
}, done).start();
});
有没有办法做到这一点?
背后的原因是我希望有不同的测试运行处理不同的文件,我在其他地方的一般配置文件中指定。
答案 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();
});