Karma 简介

Karma是Testacular的新名字,在2012年google开源了Testacular,2013年Testacular改名为Karma。Karma是一个让人感到非常神秘的名字,表示佛教中的缘分,因果报应,比Cassandra这种名字更让人猜不透!

Karma是一个基于Node.js的JavaScript测试执行过程管理工具(Test Runner)。该工具可用于测试所有主流Web浏览器,也可集成到CI(Continuous integration)工具,也可和其他代码编辑器一起使用。这个测试工具的一个强大特性就是,它可以监控(Watch)文件的变化,然后自行执行,通过console.log显示测试结果。

Karma 和 mocha,Qunit,jasmine区别

But I still want to use _insert testing library_

Karma is not a testing framework, nor an assertion library. Karma just launches an HTTP server, and generates the test runner HTML file you probably already know from your favourite testing framework. So for testing purposes you can use pretty much anything you like. There are already plugins for most of the common testing frameworks:

Jasmine
Mocha
QUnit
and many others
If you can't find an adapter for your favourite framework, don't worry and write your own. It's not that hard and we are here to help.

引用官方的说明,karma不是一个测试框架,没有断言库。Karma只是运行了一个HTTP服务并生成一个测试入口HTML文件Test Runner。所以使用Karma需要自己选择测试框架,主流的测试框架有:

  • Jasmine

  • Mocha

  • QUnit

Karma 默认的是使用jasmine

当你项目有以下需求的时候,可以考虑使用Karma

  • 你想在真实的浏览器中测试代码

  • 你想测试代码在多平台,多个浏览器(桌面,移动设备,平台)

  • 你想在本地开发期间执行测试

  • 你想在持续集成服务器执行测试

  • 你想执行测试在每次保存

  • You love your terminal.

  • You don't want your (testing) life to suck.

  • 你想使用Instanbul去自动化生成覆盖率报告

  • You want to use RequireJS for your source files.

正式开始使用


安装

# Install Karma:
$ npm install karma --save-dev

# Install plugins that your project needs:
$ npm install karma-jasmine karma-chrome-launcher jasmine-core --save-dev

初始化配置文件

 karma init my.conf.js

这里一路按enter就可以了,我们使用默认的测试框架jasmine

启动

 karma start my.conf.js

我的项目中会报找不到Error: Cannot find module 'jasmine-core'错误,开始采用的是 npm install --save-dev的模式有这个问题,分析了源码觉得是他们代码或者是node 环境下CMD的问题,我运行的Node版本是6.9.1。后来通过npm install -g 的方式暂时修复了

karma.conf.js


  config.set({

    // base path that will be used to resolve all patterns (eg. files, exclude)
    basePath: '',
    
    // 测试框架
    frameworks: ['jasmine'],


    // 要监听的文件列表,支持通配符模式
    files: [**/*.test.js],

    // 要排除的文件列表,支持通配符
    exclude: [**/*.js],

    // 在文件提交给浏览器做预处理
    // available preprocessors: https://npmjs.org/browse/keyword/karma-preprocessor
    preprocessors: {
    },


    // test results reporter to use
    // possible values: 'dots', 'progress'
    // available reporters: https://npmjs.org/browse/keyword/karma-reporter
    reporters: ['progress'],


    // web server port
    port: 9876,


    // enable / disable colors in the output (reporters and logs)
    colors: true,


    // level of logging
    // possible values: config.LOG_DISABLE || config.LOG_ERROR || config.LOG_WARN || config.LOG_INFO || config.LOG_DEBUG
    logLevel: config.LOG_INFO,


    // enable / disable watching file and executing tests whenever any file changes
    autoWatch: true,


    // start these browsers
    // available browser launchers: https://npmjs.org/browse/keyword/karma-launcher
    browsers: ['Chrome'],


    // Continuous Integration mode
    // if true, Karma captures browsers, runs the tests and exits
    singleRun: false,

    // Concurrency level
    // how many browser should be started simultaneous
    concurrency: Infinity
  })
}

总结

是不是觉得Karma挺简单的?确实是挺简单的,这就是Test-Runner而不是Test Framework。Karma核心功能就是启动一个服务并监听项目文件改变,文件改变后再刷新服务器。


甘言川
68 声望9 粉丝

坚持 '1 + 1 > 2' 的原则