大型JS应用程序避免了多个karma.conf.JS文件

Big JS app avoiding multiple karma.conf.js files

本文关键字:JS karma 文件 conf 应用程序 大型      更新时间:2023-09-26

我使用因果报应+茉莉花+幻影进行无头Javascript测试。

我的问题是,我有一个非常大的应用程序,由许多JS模块组成,我想测试这些模块所以我需要每个案例的自定义mock和每个案例的定制include

karma.conf.js只允许我有files数组,它由所有文件的模式组成,如果我的应用程序很小,而不是一个有大量文件和模块的大应用程序,这是很好的。

我的解决方案目前-为每个测试用例创建多个karma.conf.js文件。但这真的很糟糕,因为有这么多配置文件是一个大问题,如果我想更改一个设置(如autoWatch),我需要更改所有配置文件。

我的其他解决方案-在karma.conf.js前面编写自定义处理程序来处理其他参数(规范文件或文件夹,以绕过搜索其配置文件的因果报应),并简单地动态构建files阵列。

现在我看到的问题是因果报应只运行一次,我将被限制运行一个测试规范…并且我不想修改karma本身

我也考虑过使用Grunt,但还没有找到一种方法使其适用于多个测试用例。

顺便说一句,我的理想结构是这样的:

拥有文件:

test/specs/category/unit1_spec.js
test/mocks/category/unit1_mock.js

配置文件:

files: [
  {
    'includes': [array_of_includes],
    'spec': 'spec_file'
  }
]

mock文件将自动从适当的mocks目录中获取。

我可以做karma start test/specs/category,它会递归地运行文件夹中的所有测试用例。

tl;博士-我想舒服地测试一个大应用程序

如果有任何建议来处理这项任务,我将不胜感激

使用ENV变量将参数传递到karma.conf.js:中的文件

files: [
  include1, include2, ..., includeN,
  process.env.JS_TESTS + "/*.js"
]

然后像这样运行因果报应:

JS_TESTS=test/category2 karma start karma.conf.js

您可以在karma配置文件中使用require语句。

例如,在您的因果报应配置文件中,您可以执行以下操作:

files: require('./karma.conf.files')

想要更全面的答案。。我从这个链接中找到了另一个解决方案:https://groups.google.com/forum/#!主题/因果报应用户/uAf7TuVBmCQ

因果报应0.8(当前稳定)

// shared_conf.js
module.exports = {
  port: 8080
};
// karma1.conf.js
var shared = require('./shared_conf.js');
port = shared.port;

因果报应0.9(当前处于金丝雀版本):

// shared_conf.js
module.exports = function(karma) {
  karma.configure({
    port: 8080  
  });
};
// karma1.conf.js
var shared = require('./shared_conf.js');
module.exports = function(karma) {
  shared(karma);
  karma.configure({
    // override
  });
};

这使我能够从一个单独的配置文件中提取一组文件名。

咕哝因果报应听起来非常适合您的需求

它是一个复杂的多任务处理,允许子任务有一个通用配置,可以被特定的子任务覆盖。

该插件将Karma配置整合到一个文件中。例如:

karma: {
  options: {
    configFile: 'karma.conf.js',
    runnerPort: 9999,
    browsers: ['Chrome', 'Firefox']
  },
  category1: {
    files: ['app/js/category1/**/*.js', 'test/category1/*.js']
  },
  category2: {
    files: ['app/js/category2/**/*.js', 'test/category2/*.js']
  }
}

我注意到,无论传递到命令行的参数是什么,都会在初始配置对象中得到这个参数camelBase。

> karma start i-wanna-debug
module.exports = function (config) {
    config.set({
        singleRun: config.iWannaDebug ? false : true
    });
};

这允许您在多个配置中使用单个Karma配置文件。

我注意到2022年没有答案,所以它是:

  1. 需要您的基本karma.conf.js并保存到常量中
  2. 它返回一个您可以调用的函数,所以请先在配置中调用它
  3. 然后应用任何覆盖

最终代码可能看起来类似于此:

module.exports = function (config) {
  const baseConfig = require('../karma.conf');
  baseConfig(config);
  config.coverageReporter.dir = require('path').join(__dirname, '../../../coverage/my-lib_secondary');
};

在我的案例中,我需要所有代码覆盖率报告都显示在一个文件夹中,从主应用程序、库及其辅助端点。应用程序正在使用Angular 14。