基于Grunt&Mocha 搭建Nodejs自动化单元测试框架(含代码覆盖率统计)
Introduction
Grunt 是一个基于任务的JavaScript 世界的构建工具
Mocha 是具有丰富特性的 JavaScript 测试框架,可以运行在 Node.js 和浏览器中,使得异步测试更简单更有趣。Mocha 可以持续运行测试,支持灵活又准确的报告,当映射到未捕获异常时转到正确的测试示例。
Prerequisite
nodejs项目文件目录结构如下
├── config
├── controllers
├── models
├── lib
├── node_modules
├── test
├── tasks
│ ├── mochacli.js
│ ├── sonarRunner.js
│ └── mocha_istanbul.js
│── package.json
└── Gruntfile.js
test 文件夹存放所有的单元测试*.js 文件
tasks 文件夹放的是一些给grunt 执行的task 文件
package.json 里用到的依赖如下
"devDependencies": {
"chai": "^3.0.0",
"chai-as-promised": "^5.1.0",
"grunt": "^0.4.1",
"grunt-config-dir": "^0.3.2",
"grunt-mocha-cli": "^1.5.0",
"grunt-mocha-istanbul": "^2.4.0",
"grunt-sonar-runner": "^2.4.3",
"istanbul": "^0.3.14",
"load-grunt-tasks": "~0.2",
"mocha": "^1.18.0",
"sinon": "^1.15.4",
"supertest": "^0.9.0"
}
这些包的安装都是通过命令 npm install xxx --save-dev
Grunt task
Gruntfile.js 配置如下
'use strict';
module.exports = function (grunt) {
// Load the project's grunt tasks from a directory
require('grunt-config-dir')(grunt, {
configDir: require('path').resolve('tasks')
});
// Register tasks
grunt.registerTask('test', [ 'mochacli' ]);
grunt.registerTask('coverage', [ 'mocha_istanbul:coverage','sonarRunner:analysis']);
};
Task - 'mochacli' 如下
'use strict';
module.exports = function mochacli(grunt) {
// Load task
grunt.loadNpmTasks('grunt-mocha-cli');
// Options
return {
src: ['test/**/*.js'],
options: {
timeout: 6000,
'check-leaks': true,
ui: 'bdd',
reporter: 'spec'
}
};
};
用这个插件来运行Mocha的测试。
Task - 'mocha_istanbul' 如下
'use strict';
module.exports = function clean(grunt) {
// Load task
grunt.loadNpmTasks('grunt-mocha-istanbul');
// Options
return {
coverage: {
src: 'test', // a folder works nicely
options: {
coverage: true,
reportFormats: ['lcov','lcovonly'],
root: '.',
recursive: true
}
}
};
};
istanbul这个插件是用来计算代码覆盖率的,并且可以生成lcov格式的report, 以便与下一个插件sonarRunner集成,展示报告
Task - 'sonarRunner.js' 如下
'use strict';
module.exports = function clean(grunt) {
// Load task
grunt.loadNpmTasks('grunt-sonar-runner');
// Options
return {
analysis: {
options: {
debug: true,
separator: '\n',
sonar: {
host: {
url: 'http://10.101.46.20:9000'
},
jdbc: {
url: 'jdbc:mysql://10.101.46.20:3306/sonar',
username: 'sonar',
password: 'sonar'
},
javascript: {
lcov: {
reportPath: 'coverage/lcov.info'
}
},
projectKey: 'Demo:0.1.0',
projectName: 'Demo project',
projectVersion: '0.1.0',
sources: ['controllers','models','lib'].join(','),
language: 'js',
sourceEncoding: 'UTF-8'
}
}
}
};
};
运行grunt test 示例结果如下 (其实有很多用例,这里为了好展示图片,就run了一个)

运行grunt coverage 后
这里面两个task, 运行完第一个mocha_istanbul:coverage后, 根目录下会产生一个coverage目录
└──coverage
├── coverage.json
├── lcov.info
└── lcov-report
├── index.html
├── xxx
└── xxx
lcov.info格式的文件是给Sonnar展示报告用的
打开lcov-report/index.html 如下图

第二个插件是用来与Sonar集成的, 这几个grunt命令我是放在jenkins里daily build后执行的
不知道为何Sonar 解析出来的代码覆盖率数字 与 istanbul插件算出来的 差距很大。。

Reference
Grunt: http://gruntjs.com/
Mocha: http://mochajs.org/
感谢阅读,如果您觉得本文的内容对您的学习有所帮助,您可以点击右下方的推荐按钮,您的鼓励是我创作的动力。
##转载注明出处:http://www.cnblogs.com/wade-xu/p/4710968.html
基于Grunt&Mocha 搭建Nodejs自动化单元测试框架(含代码覆盖率统计)的更多相关文章
- Keil中搭建自动化单元测试框架Unity
前言: 虽然一些C++的自动化单元测试框架也能用来C语言单元测试,但那样我们编写C语言程序时需要符合C++的标准,这样有一些C的特性是无法使用的,限制C的特性使用不太好,于是找了一个全部用C实现的自动 ...
- should + mocha 搭建简单的单元测试环境
快速搭建测试环境,详细用法请百度和访问两者的github mocha: http://mochajs.org/ should: https://github.com/shouldjs/should.j ...
- TestNg JAVA 自动化单元测试框架Demo
TestNg TestNg 是java的一个自动化单元测试框架 参考:http://testng.org/doc/index.html 环境准备 既然是java 的自动化单元测试框架,就必须要有jav ...
- ASP.NET MVC搭建项目后台UI框架—7、统计报表
ASP.NET MVC搭建项目后台UI框架—1.后台主框架 ASP.NET MVC搭建项目后台UI框架—2.菜单特效 ASP.NET MVC搭建项目后台UI框架—3.面板折叠和展开 ASP.NET M ...
- Python Unittest 自动化单元测试框架Demo
python 测试框架(本文只涉及 PyUnit) https://wiki.python.org/moin/PythonTestingToolsTaxonomy 环境准备 首先确定已经安装有Pyth ...
- Python 基于python实现的http接口自动化测试框架(含源码)
基于python实现的http+json协议接口自动化测试框架(含源码) by:授客 QQ:1033553122 欢迎加入软件性能测试交流 QQ群:7156436 由于篇幅问题,采用百度网 ...
- 基于Python+requests搭建的自动化框架-实现流程化的接口串联
框架产生目的:公司走的是敏捷开发模式,编写这种框架是为了能够满足当前这种发展模式,用于前后端联调之前(后端开发完接口,前端还没有将业务处理完毕的时候)以及日后回归阶段,方便为自己腾出学(mo)习(yu ...
- Windows环境下,从零开始搭建Nodejs+Express+Ejs框架(二)---安装Express,ejs
安装Express,ejs的前提是一定要先安装nodejs,具体安装方法请查看 http://www.cnblogs.com/tfiremeteor/p/8973105.html 安装Express和 ...
- SpringBootService,一个基于spring boot搭建的SOA服务框架
SpringBootService,这是一个spring boot微服务的框架,包括redis,mq,restful,定时器,mybatis.易扩容.易维护的架构. 项目说明 该项目使用maven进行 ...
随机推荐
- windows下Bullet 2.82编译安装(Bullet Physics开发环境配置)
平台:Win7,VS2010 1. Bullet库的组织 下图是Bullet_User_Manual中的截图: 从中可见,Bullet的LinearMath(线性数学模块),其上是BulletColl ...
- Activity的Launch Mode
ANDROID四种启动模式: 1.standard:默认的启动模式,每次新建一个实例对象. 2.singleTop:如果在任务栈顶发现了相同的实例则复用该实例,否则新建一个实例并压入栈顶. 3.sin ...
- 获取地址上的ID(页面与服务器的交互)
<!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8&quo ...
- Arrays.asList()注意
api: public static <T> List<T> asList(T... a) 返回一个受指定数组支持的固定大小的列表.(对返回列表的更改会“直接写”到数组.)此方 ...
- eclipse编辑器配置
1.添加行号 在侧边空白处右键 勾选如图 2.改字体 window -> preferences 字体的常用配置 Consolas有一个问题是中文字体难以看清 解决方式有两种:一.把字体设置为C ...
- final评价Ⅱ
1.飞天小女警: 礼物挑选这个项目相比之前的发布功能更完善了些,但是整体界面还是不太美观,用户界面上呈现出的选项字不够清晰,使用起来不是很方便,但是增加了猜你喜欢的功能,可以根据用户的浏览记录猜测用户 ...
- 关于从jsp 中 引用 js 中的里层function
在需要引用的方法里: 需要引用的方法 function (){ new js中的父方法().子方法(参数) }
- 利用html5的localStorage做一个备忘录
实现一个便签功能,可以记录内容和写的时间,当网页从新载入,可以读取以前的记录. html文档 <!DOCTYPE html> <html> <head lang=&quo ...
- 更新日志(建议升级到2016.12.17) && 更新程序的方法
更新程序的方法: 1,在控制面板里点击备份当前数据库文件到磁盘,把当天获取的信息从内存写到磁盘/存储卡.2,下载最新版的源码 wget -O "infopi.zip" " ...
- edgesForExtendedLayout,automaticallyAdjustsScrollViewInsets, extendedLayoutIncludesOpaqueBars的影响
在IOS7以后 ViewController 开始使用全屏布局的,而且是默认的行为通常涉及到布局 就离不开这个属性 edgesForExtendedLayout,它是一个类型为UIExtendedEd ...