大JS应用程序测试 - 避免多个karma.conf.js文件

luk*_*nis 28 javascript testing gruntjs karma-runner

我使用karma + jasmine + phantom进行无头Javascript测试.

我遇到的问题是我有一个非常大的应用程序,包含许多我想测试的JS模块.所以我需要为每个案例定制模拟,并为每个案例定制包含.

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
Run Code Online (Sandbox Code Playgroud)

配置文件:

files: [
  {
    'includes': [array_of_includes],
    'spec': 'spec_file'
  }
]
Run Code Online (Sandbox Code Playgroud)

模拟文件将从适当的mocks目录中自动获取.

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

tl; dr - 我想测试一个大应用程序.

我将不胜感激任何处理此任务的建议.

小智 17

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

files: [
  include1, include2, ..., includeN,
  process.env.JS_TESTS + "/*.js"
]
Run Code Online (Sandbox Code Playgroud)

然后像这样运行业力:

JS_TESTS=test/category2 karma start karma.conf.js
Run Code Online (Sandbox Code Playgroud)


TDD*_*dev 16

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

例如,在您的业力配置文件中,您可以执行以下操作:

files: require('./karma.conf.files')
Run Code Online (Sandbox Code Playgroud)

要获得更全面的答案..我在此链接中找到了另一种解决方案:https://groups.google.com/forum/#!topic/karma -users/uAf7TuVBmCQ

随着业力0.8(当前稳定)

// shared_conf.js
module.exports = {
  port: 8080
};

// karma1.conf.js
var shared = require('./shared_conf.js');

port = shared.port;
Run Code Online (Sandbox Code Playgroud)

随着业力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
  });
};
Run Code Online (Sandbox Code Playgroud)

这对我来说可以从单独的配置文件中提取一组文件名.

  • 随着业力0.13,它是暴露的`config`,而不是`karma`:`module.exports = function(config){config.set({files:['a','b','c']})} `.然后在`karma1.conf.js`中,除了`config.set`方法之外,你可以读取`config.files`和所有其他值并修改它们. (5认同)

Eit*_*eer 8

grunt-karma听起来非常适合您的需求.

这是一个繁琐的多任务,它允许子任务具有通用配置,可以由特定子任务覆盖.

该插件将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']
  }
}
Run Code Online (Sandbox Code Playgroud)

  • 这对我不起作用.如果我在每个模块下使用"文件",我最终会在"运算符"中使用"无法使用"错误来搜索<我的文件路径>中的'src'.如果我使用"src"而不是"files",它会运行,但这些文件永远不会被引入测试.有什么想法吗?我昨天创建了一个帖子.http://stackoverflow.com/questions/21467715/grunt-karma-not-running-the-spec-file-when-using-shared-config (4认同)