首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

Karma + Chai + PhantomJS 單元測試不加載測試文件的排查步驟

     編輯:程式設計綜合問答

現象

  • karma start 顯示 PhantomJS 已連接。
  • 但無任何測試執行,控制台無錯誤,覆蓋率為 0。

核心配置檢查清單

// karma.conf.js 關鍵字段
module.exports = function(config) {
  config.set({
    frameworks: ['mocha', 'chai'], // 或 jasmine
    files: [
      // 1. 順序:庫 -> 源碼 -> 測試
      'node_modules/jquery/dist/jquery.js',
      'src/**/*.js',
      'test/**/*.spec.js'   // **確保 glob 匹配到文件**
    ],
    preprocessors: {
      'src/**/*.js': ['coverage'], // 可選
      'test/**/*.spec.js': ['webpack', 'babel'] // 若用 ES6/TS
    },
    webpack: { /* webpack 配置 */ },
    reporters: ['progress', 'coverage'],
    browsers: ['PhantomJS'], // 或 ChromeHeadless
    singleRun: true,
    // 2. 關鍵:autoWatch 若為 true,singleRun 應為 false
    autoWatch: false,
    // 3. PhantomJS 2.1+ 需 polyfill
    client: {
      captureConsole: true
    }
  });
};

常見原因與修復

原因現象修復
files glob 未匹配到測試文件PhantomJS 空跑,無 "EXECUTING" 日誌用 karma start --log-level debug 看 resolved files 列表,調整 glob 路徑
預處理器報錯靜默失敗Webpack/Babel 編譯錯誤但 Karma 不退出啟用 webpack: { stats: 'errors-only' },查看預處理器輸出
框架適配器未載入Mocha/Chai 全局變量未定義確認 frameworks: ['mocha', 'chai'] 且 karma-mocha/karma-chai 已安裝
PhantomJS 版本過老不支援 ES6語法錯誤導致測試文件不執行加 babel-polyfill 或遷移至 ChromeHeadless(推薦)
singleRun: true 但 autoWatch: true進程掛起不退出單次運行設 autoWatch: false

快速驗證步驟

  1. karma start --log-level debug 2>&1 | head -50 看 Resolved files 是否包含測試文件。
  2. 臨時在測試文件頂部加 console.log('TEST LOADED'),觀察 PhantomJS 控制台輸出。
  3. 嘗試 karma run(需先 karma start &)或直接 npx karma start --single-run。
  4. 若 PhantomJS 持續有問題,**直接換 ChromeHeadless**:npm i -D karma-chrome-launcher,配置 browsers: ['ChromeHeadless'],穩定性高得多。

推薦遷移:Karma + ChromeHeadless + Webpack 4/5

browsers: ['ChromeHeadless'],
customLaunchers: {
  ChromeHeadlessNoSandbox: {
    base: 'ChromeHeadless',
    flags: ['--no-sandbox', '--disable-gpu'] // CI 環境必需
  }
},

總結

90% 的「測試不跑」是 **files glob 路徑錯** 或 **預處理器靜默報錯**。開啟 debug 日誌、檢查 resolved files、遷移到 ChromeHeadless 可快速定位並解決。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved