Karma是Google用于angularjs框架单元测试的js引擎(javascript test runner ), angular1 和angular2项目源码的单元测试都是基于karma和jasmine。

 karma 特性如下:

1. 在真实设备和浏览器中运行测试。无论在手机,平板,电脑或PhantomJS 都可以运行你的测试代码。

2. 远程控制。 从IDE或命令行控制整个测试流程,当你改变并保存了测试文件,karma就会运行全部测试。

3. 不依赖于特定测试框架。 你可以搭配Jasmine,Mocha, QUnit 等任意测试框架编写测试。

4. 项目开源.  https://github.com/karma-runner/karma

5. 便捷简单的调试。 可以直接在你的IDE 比如 WebStorm 或Google Chrome浏览器调试测试代码。

6. 持续集成。 可以简单的搭配Jenkins, Travis或Semaphore 进行持续集成。

 什么时候考虑使用Karma?

1. 你想在真实的浏览器中测试你的代码。

2. 你需要在多个环境中测试你的代码(桌面,平板,移动端浏览器)。

3. 你需要在本地开发时测试你的代码。

4. 你需要在持续集成服务器中执行你的测试代码。

5. 你需要在你每一次保存代码时跑测试。

6. 你喜欢使用命令行。

7. 你喜欢简单的测试,而不是被测试弄得痛苦不堪。

8. 你希望使用Istanbul自动生成测试报告。

9. 你希望用RequireJS 测试你的源码。

10.你需要单元测试的是跑在浏览器端的js代码,文章末尾简要说明了karma的工作原理, 如果需要测试nodejs, 至此可以直接关闭文章略过下文了:)

 开始使用Karma

1. 使用npm安装Karma和相应浏览器launcher,jasmine测试框架,代码覆盖率工具,如下

    "jasmine-core": "^2.5.2",
    "karma": "^1.3.0",
    "karma-chrome-launcher": "^2.0.0",
    "karma-coverage": "^1.1.1",
    "karma-firefox-launcher": "^1.0.0",
    "karma-ie-launcher": "^1.0.0",
    "karma-jasmine": "^1.1.0",
    "karma-opera-launcher": "^1.0.0",
    "karma-phantomjs-launcher": "^1.0.2",
    "karma-safari-launcher": "^1.0.0",

2. 定义karma配置文件,有兴趣的可以看看angular 目录中以Karma开头的配置文件

module.exports = function (config) {
  config.set({

    // 基本目录
    basePath: '',

    // 使用的测试框架
    // 其他测试框架: https://npmjs.org/browse/keyword/karma-adapter
    frameworks: ['jasmine'],

    // 需要加载的js文件, 下面是link类库和test目录下的测试文件
    files: [
      'dist/link.js',
      'test/**/*Spec.js'
    ],

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

    // 预处理器
    // 可用的预处理器: https://npmjs.org/browse/keyword/karma-preprocessor
    preprocessors: {      // 利用Istanbul生成测试报告
      'dist/link.js': ['coverage']
    },

    // 可用的报表: https://npmjs.org/browse/keyword/karma-reporter
    // 代码覆盖率测试结果报表
    reporters: ['progress', 'coverage'],

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

    // 报告和log输出颜色
    colors: true,

    // 日志级别
    // 可以配置为: config.LOG_DISABLE || config.LOG_ERROR || config.LOG_WARN || config.LOG_INFO || config.LOG_DEBUG
    logLevel: config.LOG_INFO,

    // 是否启用自动检查文件改动并运行测试
    autoWatch: true,

    // 需要启动的浏览器实例,下面是启动chrome
    // 可用的浏览器: https://npmjs.org/browse/keyword/karma-launcher
    browsers: ['Chrome'/*'PhantomJS', 'Chrome', 'Firefox', 'IE', 'Safari', 'Opera'*/],

    // 是否至运行一次就结束
    singleRun: false,

    // 同时开启几个浏览器运行测试
    concurrency: Infinity,

    // 代码覆盖率报表结果配置
    coverageReporter: {
      type: 'html',
      dir: 'test/coverage/'
    }
  })
}

3. 运行karma start ,即可运行所有测试代码并生成测试报告,如下命令行运行结果和生成报告截图

测试报告如下:

4. 如何调试测试代码。

以上配置启动的浏览器实例为Chrome , 运行测试会自动打开chrome 浏览器 , 如下,点击debug按钮即可进入一个空白的调试界面(其实已经加载了你希望加载的待测试代码和测试代码, 即配置文件中files配置项定义的文件,上面我们定义了需要加载dist目录下的link.js文件和test目录下以Spec名称结尾的js文件),打开浏览器开发者工具,选择Sources选项,展开base目录即可看到我们编写的测试代码并进行调试。

以上karma配置文件和测试代码见 https://github.com/leonwgc/link  , 下载代码,运行npm install 安装好依赖后 运行npm test 或gulp test 即可启动测试并调试。 另外karma本身并不是一个测试框架,它需要搭配其他测试框架如Jasmine等进行单元测试,其工作原理是利用nodejs生成web服务器, 在所有与之连接的浏览器中通过iframe加载并执行测试代码,运行结果通过socket.io库实时报告给node处理并呈现于命令行。

利用Angularjs测试引擎Karma进行自动化单元测试的更多相关文章

  1. AngularJS测试框架 karma备忘

    AngularJS测试框架karma安装 安装karma $ --save-dev 安装karma组件 $ npm install karma-jasmine karma-chrome-launche ...

  2. angularJS测试一 Karma Jasmine Mock

    AngularJS测试 一 测试工具 1.NodeJS领域:Jasmine做单元测试,Karma自动化完成单元测试,Grunt启动Karma统一项目管理,Yeoman最后封装成一个项目原型模板,npm ...

  3. 搭建Karma+Jasmine的自动化单元测试

    最近在打算将以前的代码进行重构,过程中发现自己不写自动化测试代码,而是手动的写,这样并不好,所以就学了Karma+Jasmine的自动化单元测试,以后写代码尽量要写自动化单元测试,也要测一下istan ...

  4. Karma和Jasmine自动化单元测试——本质上还是在要开一个浏览器来做测试

    1. Karma的介绍 Karma是Testacular的新名字,在2012年google开源了Testacular,2013年Testacular改名为Karma.Karma是一个让人感到非常神秘的 ...

  5. Karma和Jasmine自动化单元测试

    从零开始nodejs系列文章,将介绍如何利Javascript做为服务端脚本,通过Nodejs框架web开发.Nodejs框架是基于V8的引擎,是目前速度最快的Javascript引擎.chrome浏 ...

  6. Karma和Jasmine 自动化单元测试环境搭建

    最近初学AngularJS ,看到的一些教程中经常有人推荐使用Karma+Jasmine来进行单元测试.自己之前也对Jasmine有些了解,jasmine也是一个不错的测试框架. 1. karma介绍 ...

  7. 学习Karma+Jasmine+istanbul+webpack自动化单元测试

    学习Karma+Jasmine+istanbul+webpack自动化单元测试 1-1. 什么是karma?  Karma 是一个基于Node.js的Javascript测试执行过程管理工具.该工具可 ...

  8. 测者的测试技术手册:AI的自动化单元测试

    测者的测试技术手册:AI的自动化单元测试 谈新技术:AI的自动化单元测试    

  9. 自动化单元测试(Karma + Mocha)

    使用 Karma + Mocha做单元测试 Karma([ˈkɑrmə] 卡玛)是一个测试运行器,它可以呼起浏览器,加载测试脚本,然后运行测试用例 Mocha([ˈmoʊkə] 摩卡)是一个单元测试框 ...

随机推荐

  1. 【TJOI&HEOI2016】【Bzoj4551】树

    这道题是可以用树链剖分来做的,但其实有比它更加简单的做法--并查集. 可以想到,这类题的一种常见做法是离线处理,先全部读入,再从后往前处理,每次遇到标记操作,就把这个点的标记次数减一,到零以后就把这个 ...

  2. ASP.NET Core 数据保护(Data Protection)【上】

    前言 上一篇博客记录了如何在 Kestrel 中使用 HTTPS(SSL), 也是我们目前项目中实际使用到的. 数据安全往往是开发人员很容易忽略的一个部分,包括我自己.近两年业内也出现了很多因为安全问 ...

  3. Guava monitor

    Guava的com.google.util.concurrent类库提供了相对于jdk java.util.concurrent包更加方便实用的并发类,Monitor类就是其中一个.Monitor类在 ...

  4. 仅此一文让你明白ASP.NET MVC 之View的显示(仅此一文系列二)

    题外话 一周之前写的<仅此一文让你明白ASP.NET MVC原理>受到了广大学习ASP.NET MVC同学的欢迎,于是下定决心准备把它写成一个系列,以满足更多求知若渴的同学们.蒋金楠老师已 ...

  5. 【Java并发编程实战】-----“J.U.C”:Semaphore

    信号量Semaphore是一个控制访问多个共享资源的计数器,它本质上是一个"共享锁". Java并发提供了两种加锁模式:共享锁和独占锁.前面LZ介绍的ReentrantLock就是 ...

  6. 收集最好的Mac软件和使用方法

    MacBook 初体验 作者是刚从Windows下转到mac时写的,这篇文章对也主要介绍了Mac下开发环境的部署.软件的安装和卸载.常用快捷键.文件系统的介绍. http://liujiacai.ne ...

  7. 关于printf错用格式化字符串导致double和long double输出错误的小随笔

    [题外话] 以前用HUSTOJ给学校搭建Online Judge,所有的评测都是在Linux下进行的.后来为了好往学校服务器上部署,所以大家重新做了一套Online Judge,Web和Judge都是 ...

  8. 七天学会ASP.NET MVC (四)——用户授权认证问题

    小编应各位的要求,快马加鞭,马不停蹄的终于:七天学会 Asp.Net MVC 第四篇出炉,在第四天的学习中,我们主要了学习如何在MVC中如何实现认证授权等问题,本节主要讲了验证错误时的错误值,客户端验 ...

  9. oracle数据库的安装、配置与无残留卸载

    安装配置   :关闭专用网络防火墙 2 :以管理员身份运行安装文件 ——“setup.exe” 3 :设置口令    其中SYS 用户权限大于 SYSTEM 4 :先决条件检查,若验证成功,点击 ”下 ...

  10. C++中static数据成员详解

        本文和大家分享的主要是c++中static数据成员的相关用法及源码示例,希望能帮助大家更好的学习C++. static(静态存储)数据成员 StaticTest.cpp : 定义控制台应用程序 ...