一、简介
Istanbul是JavaScript程序的代码覆盖率工具Mocha是一种测试框架,也就是运行测试的工具。用descibe和it方法,来定义test suit,为不同的测试分组。mocha本身并不提供assert断言,所以要提供更加有表现力的断言,可以搭配chai使用,当然也可以使用nodejs提供的assert模块
二、配置测试环境
安装相应的依赖包
npm install --save-dev mocha chai istanbul |
- 安装完成之后,在
package.json文件的scripts下,添加执行测试和测试覆盖率检查的命令
{ |
- 注意,
window下必须要这样才可以执行cover
"cover": "istanbul cover C:\Users\Administrator\Desktop\test\node_modules\mocha\bin\_mocha --reporter test/mocha.js" |
- 运行
npm run cover和npm run cover:check,就可以生成测试报告,前者生成测试报告,后者则是检查测试覆盖率是否达到要求

配置Istanbul
istanbul相关的执行参数,可以在命令行下执行时传递参数来制定,也可以在yaml格式的.istanbul.yml文件中配置。简单贴出一些重要的配置项
instrumentation: |
最后的
check是项目要通过覆盖率检查需要达到的测试覆盖率,测试覆盖率包括四个维度,分别是语句覆盖率、分支覆盖率、行覆盖率和函数覆盖率。如果达不到设定的指标,在执行的时候会报错,项目的测试就无法通过自动化的持续集成
三、编写测试代码
- 利用
chai提供的expect断言,我们可以用BDD的方式,写出更加符合代码预期行为的测试用例.- 通常,测试脚本与所要测试的源码脚本同名,但是后缀名为
.test.js(表示测试)或者.spec.js(表示规格)。比如,add.js的测试脚本名字就是add.test.js
const {should, expect, assert} = require('chai'); |
- 测试脚本里面应该包括一个或多个
describe块,每个describe块应该包括一个或多个it块 describe中的名字是自己定义的,为了方便查看describe块称为”测试套件”(test suite),表示一组相关的测试。它是一个函数,第一个参数是测试套件的名称(”加法函数的测试”),第二个参数是一个实际执行的函数- it块称为”测试用例”(
test case),表示一个单独的测试,是测试的最小单位
四、断言库的用法
所谓”断言”,就是判断源码的实际执行结果与预期结果是否一致,如果不一致就抛出一个错误
- 所有的测试用例(
it块)都应该含有一句或多句的断言。它是编写测试用例的关键。断言功能由断言库来实现,Mocha本身不带断言库,所以必须先引入断言库
var expect = require('chai').expect; |
- 断言库有很多种,
Mocha并不限制使用哪一种。上面代码引入的断言库是chai,并且指定使用它的expect断言风格。chai包含了几种风格,如shouldexpectassert。expect断言的优点是很接近自然语言.
// 相等或不相等 |
- 基本上,
expect断言的写法都是一样的。头部是expect方法,尾部是断言方法,比如equal、a/an、ok、match等。两者之间使用to或to.be连接 - 如果
expect断言不成立,就会抛出一个错误。事实上,只要不抛出错误,测试用例就算通过。
五、持续集成
完成所有代码之后,我们可以将代码发布到
github,然后使用持续集成工具travis检查代码,将生成的测试报告上传到coverall上,这样就可以在项目中显示项目状态和测试覆盖率的badges
持续集成是一种软件开发流程
频繁将代码集成到主干
每次集成都通过自动化的构建来验证
尽早发现错误
防止防止大幅偏离主干
通常的
nodejs项目.travis.yml配置如下
language: node_js |
六、Mocha的命令行参数
--help或-h参数,用来查看Mocha的所有命令行参数--reporter, -R--reporter参数用来指定测试报告的格式,默认是spec格式
$ mocha |