预处理器

Karma 中的预处理器允许你在文件被提供给浏览器之前对它们进行一些处理。这些预处理器在配置文件的 preprocessors 块中进行配置。

preprocessors: {
  '**/*.coffee': ['coffee'],
  '**/*.tea': ['coffee'],
  '**/*.html': ['html2js']
},

注意

此示例中有多个表达式引用了“coffee”预处理器,因为预处理器可以多次列出,作为指定多个文件路径表达式的另一种方式。

注意

大多数预处理器需要作为插件加载。

可用预处理器 #

以下是如何将 CoffeScript 预处理器添加到你的测试套件中的示例

# Install it first with npm
$ npm install karma-coffee-preprocessor --save-dev

然后在你的配置文件中...

module.exports = function(config) {
  config.set({
    preprocessors: {
      '**/*.coffee': ['coffee']
    }
  });
};

当然,你也可以编写自定义插件

已配置的预处理器 #

一些预处理器也可以进行配置

coffeePreprocessor: {
  options: {
    bare: false
  }
}

或者定义一个已配置的预处理器

customPreprocessors: {
  bare_coffee: {
    base: 'coffee',
    options: {bare: true}
  }
}

迷你匹配 #

预处理器配置对象的键用于过滤 files 配置中指定的文件。

  • 首先,文件路径根据 basePath 配置和配置文件的目录扩展为绝对路径。有关详细信息,请参阅文件
  • 然后使用minimatch将新扩展的路径与指定的键进行匹配。

例如,路径 /my/absolute/path/to/test/unit/file.coffee 与键 **/*.coffee 匹配将返回 true,但与 *.coffee 匹配将返回 false,并且预处理器不会在 CoffeeScript 文件上执行。

执行顺序 #

如果文件仅与预处理器配置对象中的一个键匹配,则 Karma 将按照它们在相应数组中列出的顺序依次对该文件执行预处理器。例如,如果配置对象为

preprocessors: {
  '*.js': ['a', 'b']
}

则 Karma 将在执行 'b' 之前执行 'a'

如果文件匹配多个键,则 Karma 将使用 config.preprocessor_priority 映射来控制执行顺序。config.preprocessor_priority 应该是一个对象,其属性名称等于预处理器名称,属性值等于执行优先级。优先级较高的预处理器将更早运行。默认优先级为 0。

如果未设置此配置选项,Karma 将尽力以合理的顺序执行预处理器。因此,如果你有

preprocessors: {
  '*.js': ['a', 'b'],
  'a.*': ['b', 'c']
}

那么对于 a.js,Karma 将运行 'a',然后运行 'b',最后运行 'c'。如果两个列表相互矛盾,例如

preprocessors: {
  '*.js': ['a', 'b'],
  'a.*': ['b', 'a']
}

那么 Karma 将任意选择一个列表优先于另一个列表。在这种情况下

preprocessors: {
  '*.js': ['a', 'b', 'c'],
  'a.*': ['c', 'b', 'd']
}

那么 'a' 将肯定首先运行,'d' 将肯定最后运行,但 Karma 是否会在 'b' 之前运行 'c' 或反之亦然是任意的。