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
配置文件:
files: [
  {
    'includes': [array_of_includes],
    'spec': 'spec_file'
  }
]
模拟文件将从适当的mocks目录中自动获取.
我可以做karma start test/specs/category,它会递归运行文件夹中的所有测试用例.
tl; dr - 我想测试一个大应用程序.
我将不胜感激任何处理此任务的建议.
小智 17
使用ENV变量将参数传递给karma.conf.js中的文件:
files: [
  include1, include2, ..., includeN,
  process.env.JS_TESTS + "/*.js"
]
然后像这样运行业力:
JS_TESTS=test/category2 karma start karma.conf.js
TDD*_*dev 16
您可以在karma配置文件中使用require语句.
例如,在您的业力配置文件中,您可以执行以下操作:
files: require('./karma.conf.files')
要获得更全面的答案..我在此链接中找到了另一种解决方案: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;
随着业力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
  });
};
这对我来说可以从单独的配置文件中提取一组文件名.
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']
  }
}