如何为多个require模块设置单元测试

时间:2015-03-17 21:02:31

标签: javascript unit-testing requirejs karma-runner karma-coverage

我正在开发一个代码库,代码分为多个需求模块。 即每个部分都有自己的main.js和require配置。

我想使用Karma为整个代码库设置代码覆盖率。

由于每个部分都有自己的requirejs配置,因此我为每个模块创建了一个test-main.js。

让karma.config加载所有test-main.js文件。

我遇到了问题。 baseUrl之间存在冲突。

当只测试一个模块时,它可以正常工作。

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

你可以通过编程方式使用业力链接多个业力跑步者。 Karma offers an 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...];
}

以编程方式启动Karma

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