前置處理器

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' 是任意的。