Karma和Jasmine自动化单元测试

Karma和Jasmine自动化单元测试

Nodejs领域: Jasmine做单元测试,Karma自动化完成单元测试,Grunt启动Karma统一项目管理,Yeoman最后封装成一个项目原型模板,npm做nodejs的包依赖管理,bower做javascript的包依赖管理。

Karma介绍

Karma是一个基于Node.js的JavaScript测试执行过程管理工具(Test Runner)
Karma 是针对连通浏览器的一个框架无关测试运行器。每一个测试结果对应每个浏览器,它的测试和显示都是通过命令行暴露给开发者的,这样他们就可以看到浏览器测试的通过或失败。

Jasmine介绍

Jasmine是单元测试框架,可用Karma让Jasmine测试自动化完成。
Jasmine 是一个行为驱动的测试开发框架,用于对 JavaScript 代码进行测试。它不依赖其它任何 JavaScript 框架,也不需要 DOM。它的语法简洁、明确,写测试非常容易。

Karma的安装

先安装: node / npm

~ D:\workspace\javascript>mkdir karma
~ D:\workspace\javascript>cd karma
~ D:\workspace\javascript\karma>npm install -g karma
# 测试是否安装成功
~ D:\workspace\javascript\karma>karma start
INFO [karma]: Karma v0.10.2 server started at http://localhost:9876/
INFO [Chrome 28.0.1500 (Windows 7)]: Connected on socket nIlM1yUy6ELMp5ZTN9Ek

  从浏览器看到karam界面。

img

Karma + Jasmine配置

  初始化karma配置文件karma.conf.js

​ 输入命令 : karma init // 全部enter 下一步;


~ D:\workspace\javascript\karma>karma init
Which testing framework do you want to use ?
Press tab to list possible options. Enter to move to the next question.
> jasmine
Do you want to use Require.js ?
This will add Require.js plugin.
Press tab to list possible options. Enter to move to the next question.
> no
Do you want to capture a browser automatically ?
Press tab to list possible options. Enter empty string to move to the next question.
> Chrome
>
What is the location of your source and test files ?
You can use glob patterns, eg. "js/*.js" or "test/**/*Spec.js".
Enter empty string to move to the next question.
>
Should any of the files included by the previous patterns be excluded ?
You can use glob patterns, eg. "**/*.swp".
Enter empty string to move to the next question.
>
Do you want Karma to watch all the files and run the tests on change ?
Press tab to list possible options.
> yes
Config file generated at "D:\workspace\javascript\karma\karma.conf.js".

安装集成包karma-jasmine

npm install karma-jasmine

自动化单元测试

3步准备工作:

  1. 创建源文件:用于实现某种业务逻辑的文件,就是我们平时写的js脚本
  2. 创建测试文件:符合jasmineAPI的测试js脚本
  3. 修改karma.conf.js配置文件

1). 创建源文件:用于实现某种业务逻辑的文件,就是我们平时写的js脚本

  有一个需求,要实现单词倒写的功能。如:”ABCD” ==> “DCBA”


~ vi src.js
function reverse(name){
return name.split("").reverse().join("");
}

 2). 创建测试文件:符合jasmineAPI的测试js脚本

jasmine 教程


describe("A suite of basic functions", function() {
    it("reverse word",function(){
    	expect("DCBA").toEqual(reverse("ABCD"));
    });
});

3). 修改karma.conf.js配置文件

我们这里需要修改:files和exclude变量


module.exports = function (config) {
    config.set({
        basePath: '',                                 //文件的路径
        frameworks: ['jasmine'],              // 使用的测试框架
        files: ['*.js'],                                  // 测试文件的
        exclude: ['karma.conf.js'],           // 排除测试的文件
        reporters: ['progress'],
        port: 9876,                                  // 端口
        colors: true,                    
        logLevel: config.LOG_INFO,
        autoWatch: true,                          // 修改后自动更新
        browsers: ['Chrome'],                   // 浏览器
        captureTimeout: 60000,                
        singleRun: false
    });
};

  启动karma karma start karma.conf.js

  单元测试全自动执行


~ D:\workspace\javascript\karma>karma start karma.conf.js
INFO [karma]: Karma v0.10.2 server started at http://localhost:9876/
INFO [launcher]: Starting browser Chrome
WARN [launcher]: The path should not be quoted.
Normalized the path to C:\Program Files (x86)\Google\Chrome\Application\chrome.exe
INFO [Chrome 28.0.1500 (Windows 7)]: Connected on socket bVGffDWpc1c7QNdYye_6
INFO [Chrome 28.0.1500 (Windows 7)]: Connected on socket DtTdVbd4ZsgnMQrgye_7
Chrome 28.0.1500 (Windows 7): Executed 1 of 1 SUCCESS (3.473 secs / 0.431 secs)
Chrome 28.0.1500 (Windows 7): Executed 1 of 1 SUCCESS (0.068 secs / 0.021 secs)
TOTAL: 2 SUCCESS

总结:及附 jasmine 语法;

img

Karma和istanbul代码覆盖率

增加代码覆盖率检查和报告,增加istanbul依赖

npm install karma-coverage

修改karma.conf.js配置文件

~ vi karma.conf.js

reporters: ['progress','coverage'],
preprocessors : {'src.js': 'coverage'},
coverageReporter: {
type : 'html',
dir : 'coverage/'
}

  启动karma start,在工程目录下面找到index.html文件,coverage/chrome/index.html
  打开后,我们看到代码测试覆盖绿报告img

问题解决

karma start karma.conf.js总是提示 jasmime-core没有安装时,使用全局安装解决;

npm install -g karma
npm install -g jasmine-core
npm install -g karma-jasmine

执行karma init时报错如下

> readline.js:561
  this.line = this.line.slice(this.cursor);

使用 Git Bash 会报以上错,换用 windows 自带的命令行工具就 OK 了。

总结,及附jasmine 语法介绍;

参考文档

Karma单元测试使用

安装和使用Karma-Jasmine进行自动化测试

Karma和Jasmine自动化单元测试

Jasmine中文指南

posted @ 2018-04-24 00:40  wangpinzhou  阅读(192)  评论(0)    收藏  举报