Karma 简介

Flying
2014-11-25 / 0 评论 / 160 阅读 / 正在检测是否收录...

Karma 是无痛的、超高速运行的测试运行器。 它使用NodeJS. SocketIO 技术,让多浏览器超高速测试变得容易。

karma.svg

测试运行器和测试框架

我们常常注意到开发人员有时会对测试运行器和测试框架感到困惑。这可能是因为同一 JavaScript 库通常处理这两个任务。

与 JS(AngularJS) 工作时,我们为每个目标使用不同的工具库。Karma 作为测试运行器,仅负责寻找代码库中所有的单元测试,打开浏览器,运行这些测试,并获取结果。它不关心我们使用语言或框架编写测试;只简单地运行它们。

Jasmine 是我们将使用的测试框架。Jasmine 定义了我们写测试的语法、API、断言方式。我们可以不使用 Jasmine ,而是使用像 mocha 或其他框架编写 AngularJS 测试。

Karma 是一个很棒的测试运行器,它可以使测试尽可能简单和快速。它很容易编写测试然后就放手不管,让我们开发人员迅速反馈我们的代码和测试。

下面是安装 Karma (在撰写本文时)的步骤:

  1. 安装 NodeJS.您可以从这里获取安装程序。
  2. 安装 Karma CLI,它允许您用使用简单步骤运行 Karma 。它是一个 npm (Node 包管理器)包,所以您可以用下面命令来安装:
npm install-.karma-cli

Windows 用户可以在 NodeJS 安装成功之后从命令行运行它。

  1. 本地安装 Karma 到您想要运行测试的文件夹:
npm install karma
  1. Karma 有一个概念叫做插件,它允许为您项目只选择所需组件。这些插件允许您选择什么框架用于编写单元测试(Karma 是框架未知论者),用什么浏览器启动等。我们将开始安装 Jasmine 插件编写我们的测试,安装 Chrome 启动器自动打开 Google Chrome。这两个插件使用下面的命令来安装:
npm install karma-jasmine karma-chrome-launcher

确保您从您下载代码库的文件夹路径运行最后两个命令。这些命令都是特定于每个项目,需要为每个新项目运行。

我们项目运行 Karma 的推荐方式已经随 Karma 版本的更新发生改变,现在推荐为每个项目本地安装 Karma 包而不是全局安装。在前面的教程中我们演示了本地安装。

这也意味着我们必须从 Karma 本地 npm 安装文件夹路径执行命令而不是从命令行直接运行。 那就是:
karma start myconf.js将不得不写成:node_modules/karma/bin/karma start myconf.js

Karma 有一个称为 karma -cli npm 包允许我们不这样做,我们已经安装过了。它让我们能够在不完全路径下执行 Karma ,因为系统会搜索 Karma 的本地安装。

Karma 插件

上文我们给 Karma 安装了两个插件。让我们进一步讲解 Karma 插件。Karma 插件大致可以分成以下类别:

  • 浏览器启动器

第一种插件作为测试运行的一部分,帮助 Karma 自动启动浏览器。我们安装了 Chrome 浏览器启动插件,还有其它类似如 Firefox 、IE 等。

  • 测试框架

编写单元测试时,我们也可以选择想要使用的那种框架。我们将使用在前面小节中已经安装过的 Jasmine ,但如果您喜欢用不同风格编写单元测试,比如 mocha.qunit,也是可用相应的插件。

  • 报告

Karma 也可以用各种形式输出测试结果。默认的过程报告是内置的,但您可以通过 junit.xml 文件决定需要测试结果。您可以为此安装一个 Karma 插件。

  • 集成

另一种主要类别插件允许我们集成现有的 JavaScript 库或工具,比如谷歌 Closure.RequireJS。它们大多数也有相应的 Karma 插件,可以根据需要安装。

Karma 配置解释

使用 Karma ,我们需要一个告诉 Karma 如何操作的配置文件。下一节我们将看到生成这个配置文件是多么容易。但在本章节让我们先来看一看 Karma 配置和单元测试选项。这个文件的缺省名称是 karma.conf.js,除非您告诉 Karma 否则它会在 Karma 运行目录中自动寻找该名字的文件:

// Karma 配置
module.exports = function (config) {
  config.set({
    // 基本路径,用来解析排除文件
    basePath: '',
    // 使用的测试框架(jasmine/mocha/qunit/...)
    frameworks: ['jasmine'],
    // 加载到浏览器的文件列表或通配规则
    files: [
      'angular.min.js',
      'angular-mocks.js',
      'controller.js',
      'simpleSpec.js',
      'controllerSpec.js'
    ],
    // 排除的文件列表或通配规则
    exclude: [],
    // 服务器端口
    port: 8080,
    // 日志级别
    // 可设定值: LOG_DISABLE || LOG_ERROR ||
    //                  LOG_WARN || LOG_INFO || LOG_DEBUG
    logLevel: config.LOG_INFO,
    // 任何文件变化时激活或禁止观察文件执行测试
    // whenever any file changes
    autoWatch: true,
    // 启动浏览器,目前可用值:
    // - Chrome
    // - ChromeCanary
    // - Firefox
    // - Opera
    // - Safari (only Mac)
    // - PhantomJS
    // - IE (only Windows)
    browsers: ['Chrome'],
    // 持续集成模式
    // 如果设置成 true ,它将捕获浏览器、运行测试并退出
    singleRun: false
  })
}

让我们看一看前面例子中每个选项,看一看他们对 Karma 有什么影响:

  • basePath

所有文件的进行测试和测试自己的需要加载的基本路径。这是相对于 Karma 配置文件的位置。

  • frameworks

什么框架将作为一个数组加载。 在我们的示例中,我们加载 Jasmine (要求 karma -jasmine 插件安装)。 您可以选择 mocha 、qunit 或其它框架。

  • files

文件列表(或文件路径)作为一个数组加载。对于 AngularJS ,我们首先加载 AngularJS 库,然后加载测试助手:angular-mocks.js 文件,AngularJS 将其作为测试助手。最后,我们加载应用程序源代码,接着加载实际的单元测试。

  • exclude

需要排除的文件列表(或文件路径)。该选项用对文件使用大量的通配规则(通配符声明包括一组文件,如**.js),从而排除某些特殊文件(如 karma.conf.js)。

  • port

指定 Karma 测试运行器服务器的端口。在默认情况下,端口是 8080

  • logLevel

指定 Karma 需要从浏览器获取的日志级别(console.logconsole.info)。

  • autoWatch

这是 Karma 到目前为止最酷最有用的特性。它告诉 Karma 一直观察文件配置的所有文件,如果其中任何一个文件变化,将运行影响的单元测试。 如果该选项设置为 true ,您不需要手动触发运行单元测试;Karma 将为您代办。

  • browsers

浏览器应该在 Karma 初始化打开。大部分浏览器要求安装 karma -launcher 插件(我们安装了 chrome -launcher,所以我们此处指定选项为 Chrome )。

  • singleRun

这是一个布尔值,它告诉 Karma 运行一个单元测试后关闭服务器。持续集成环境应该设置为 true ,否则会被忽略。

还有您可以设置和修改与 Karma 的更多配置,但我们不会在这本书深入讲解。您可以在Karma 配置文件概述页面了解更多。

生成 Karma 配置

现在,您当然可以从前面的配置文件章节复制和粘贴的内容开始,但 Karma 提供了一个更好的方式让您开始自己的 Karma 配置。Karma 可以通过运行下面的命令自动生成配置 :

karma init

该命令触发一个交互式 shell ,它提示我们的一系列问题。每个回答通常有一系列的选项,您可以通过使用键盘上的 Tab 键来选择。当选择所有选项之后,将生成 karma.conf.js 文件。

7

评论 (0)

取消