我正在开发一个代码库,其中代码分为多个需要模块。即每个部分都有自己的 main.js 和 require 配置。
我想使用 Karma 为整个代码库设置代码覆盖率。
由于每个部分都有自己的 requirejs 配置,因此我为每个模块创建了一个 test-main.js。
并让 karma.config 加载所有 test-main.js 文件。
我遇到了问题。baseUrl 之间存在冲突。
仅测试一个模块时,它可以正常工作。
任何想法 ?
我正在开发一个代码库,其中代码分为多个需要模块。即每个部分都有自己的 main.js 和 require 配置。
我想使用 Karma 为整个代码库设置代码覆盖率。
由于每个部分都有自己的 requirejs 配置,因此我为每个模块创建了一个 test-main.js。
并让 karma.config 加载所有 test-main.js 文件。
我遇到了问题。baseUrl 之间存在冲突。
仅测试一个模块时,它可以正常工作。
任何想法 ?
您可以以编程方式使用 karma 链接多个 karma runner。Karma提供了一个 API以使其以编程方式工作(恕我直言,这不是很清楚 - 一些示例可以改进它)。
首先,您需要一组配置,然后您需要以编程方式调用 karma 并链接调用。
function getConfiguration(filename){
return {
// you can enrich the template file here if you want
// e.g. add some preprocessor based on the configuration, etc..
//
// if not set in the config template
// make Karma server launch the runner as well
singleRun: true,
// point to the template
configFile : __dirname + filename
};
}
function createConfigurations(){
return [getConfiguration('conf1.js'), getConfiguration('conf2.js'), etc...];
}
function startKarma(conf, next){
karma.server.start(conf, function(exitCode){
// exit code === 0 is OK
if (!exitCode) {
console.log('\tTests ran successfully.\n');
// rerun with a different configuration
next();
} else {
// just exit with the error code
next(exitCode);
}
});
// Use the async library to make things cleaner
var async = require('async');
var karma = require('karma');
var confs = createConfigurations();
async.eachSeries(confs, startKarma, function(err){
if(err){
console.log('Something went wrong in a runner');
else {
console.log('Yay! All the runners have finished ok');
}
});