Karma

2024-06-27 16:58:49 395
Karma 是一个由 AngularJS 团队开发的 JavaScript 测试运行器,用于在真实浏览器中运行测试。它主要用于单元测试和集成测试,支持多种测试框架(如 Jasmine、Mocha、QUnit)和多种浏览器(如 Chrome、Firefox、Safari、IE)。

特点

  1. 跨浏览器测试:支持在多种浏览器中运行测试,包括移动设备浏览器。
  2. 实时反馈:自动监听文件变化并实时运行测试,提供快速反馈。
  3. 集成 CI 工具:与 CI 工具(如 Jenkins、Travis CI)集成,自动化测试流程。
  4. 插件丰富:拥有大量插件,支持多种测试框架、浏览器和报告器。
  5. 易于配置:通过简单的配置文件(karma.conf.js)即可快速设置和定制测试环境。
  6. 调试支持:提供易于使用的调试工具,可以在浏览器中直接调试测试代码。

使用场景

  1. 单元测试:验证单个模块或函数的功能是否正确。
  2. 跨浏览器测试:确保代码在不同浏览器中的兼容性和稳定性。
  3. 集成测试:测试多个模块之间的交互和集成情况。
  4. 自动化测试:集成 CI 工具,自动运行测试,确保代码质量。

安装方式

使用 npm 安装 Karma 及其相关工具:

npm install --save-dev karma karma-jasmine jasmine-core karma-chrome-launcher

初始化 Karma 配置文件:

npx karma init

使用示例

Karma 配置文件

创建一个 karma.conf.js 文件:

module.exports = function(config) {
  config.set({
    // 基础路径,用于解析文件和排除文件
    basePath: '',

    // 使用的测试框架
    frameworks: ['jasmine'],

    // 要加载到浏览器中的文件列表
    files: [
      'src/**/*.js',
      'test/**/*.spec.js'
    ],

    // 要排除的文件列表
    exclude: [],

    // 预处理器配置
    preprocessors: {
      'src/**/*.js': ['coverage']
    },

    // 使用的报告器
    reporters: ['progress', 'coverage'],

    // Web 服务器端口
    port: 9876,

    // 启用或禁用颜色输出
    colors: true,

    // 日志级别
    logLevel: config.LOG_INFO,

    // 启用或禁用自动监控文件并执行测试
    autoWatch: true,

    // 启动的浏览器
    browsers: ['Chrome'],

    // 持续集成模式
    singleRun: false,

    // 并发级别
    concurrency: Infinity
  });
};

测试文件

创建一个 src/sum.js 文件:

function sum(a, b) {
  return a + b;
}

创建一个 test/sum.spec.js 文件:

describe('sum', function() {
  it('should return the sum of two numbers', function() {
    expect(sum(1, 2)).toBe(3);
  });
});

运行测试:

npx karma start

常用 API 介绍

  1. config.set(configurationObject):配置 Karma 的运行参数。

    module.exports = function(config) {
      config.set({
        // 配置参数
      });
    };
    
  2. files:指定要加载到浏览器中的文件列表。

    files: [
      'src/**/*.js',
      'test/**/*.spec.js'
    ];
    
  3. frameworks:指定使用的测试框架。

    frameworks: ['jasmine'];
    
  4. reporters:指定使用的报告器。

    reporters: ['progress', 'coverage'];
    
  5. browsers:指定要启动的浏览器。

    browsers: ['Chrome'];
    
  6. preprocessors:指定要应用的预处理器。

    preprocessors: {
      'src/**/*.js': ['coverage']
    };
    
  7. autoWatch:启用或禁用自动监控文件并执行测试。

    autoWatch: true;
    
  8. singleRun:启用或禁用持续集成模式。

    singleRun: false;
    

高级用法

集成 CI 工具

Karma 可以与 CI 工具(如 Jenkins、Travis CI)集成,自动运行测试并生成报告。以下是一个简单的 Travis CI 配置示例:

language: node_js
node_js:
  - "stable"

install:
  - npm install

script:
  - npm test

自定义报告器

可以通过安装和配置插件来自定义报告器,例如使用 karma-spec-reporter 来生成更详细的测试报告:

npm install --save-dev karma-spec-reporter

karma.conf.js 中配置:

reporters: ['spec'],

调试测试代码

Karma 提供了调试工具,可以在浏览器中直接调试测试代码。只需在 karma.conf.js 中将 singleRun 设置为 false 并运行 Karma,打开浏览器的开发者工具即可调试测试代码。

官方资料