JavaScript 单元测试的“抹茶”组合:Mocha 和 Chai
mocha
是一个 javascript 的测试框架,chai
是一个断言库,两者搭配使用更佳,所以合称“抹茶”(其实mocha
是咖啡)。“抹茶”特点是: 简单,node
和浏览器都可运行。
BDD
:Behavior Driven Development,行为驱动开发,注重测试逻辑TDD
:Test-Driven Development,测试驱动开发,注重输出结果
Mocha
Mocha
是一个功能丰富的 JavaScript 测试框架,可以运行在 node 和浏览器上,使异步测试变得简单而有趣。Mocha
在运行测试用例过程中,当捕获到错误时,依旧能够灵活地运行精确的报告。mocha
默认的模式是 BDD
。
在 Node.js
中,目前比较流行的单元测试组合是 mocha + chai
。mocha
是一个测试框架,chai
是一个断言库,所以合称”抹茶”。
安装
运行
基本方法
Mocha 有三个基本方法:
describe(moduleName, function)
describe 是可嵌套的,描述测试用例是否正确。
it(info, function)
info 为描述性说明。一个 it 对应一个单元测试用例。
assert.equal(exp1, exp2)
mocha
的断言语句,判断 exp1
是否等于 exp2
。
异步代码测试
done
一个 it
里面只有一个 done
。
done
标识回调的最深处,也是嵌套回调函数的末端。
Test Hooks 方法
before()
、after()
、beforeEach()
、afterEach()
是基于 BDD
风格提出的,用于预处理和 test
后的处理。
Test Hooks
方法的几个注意点:
beforeEach
会对当前describe
下的所有子case
生效;before
和after
的代码没有特殊顺序要求;同一个
describe
下的执行顺序为before
、beforeEach
、afterEach
、after
;当一个
it
有多个before
的时候,执行顺序是从最外围的describe
的before
开始,其他同理。
Hooks
的三种写法:
only()、skip()函数
describe
块和 it
块都允许调用 only()
和 skip()
方法。
only()
方法表示在当前的父 describe
块下,只执行该单元的测试。
skip()
方法表示在当前的父 describe
块下,跳过不执行该单元的测试。
当在一个 describe
块下,同时存在 only()
和 skip()
方法,则只执行 .only()
方法。
常用命令参数
--recursive
遍历子目录下的全部文件
Mocha 默认运行 /test
子目录里面的测试脚本。
Mocha 默认只执行 /test
子目录下第一层的测试用例。
所以,应加上– recursive
参数,使全部子目录下的测试用例都能被执行。
-u tdd
执行 TDD
模式
mocha 默认的模式是 BDD
,要想执行 TDD
的 test
时需要加上参数,如:
--watch, -w
监听脚本变化
--watch
参数用来监视指定的测试脚本。当脚本发生变化,就会自动运行 mocha。
--bail, -b
参数指定只要有一个测试用例没有通过,就停止执行后面的测试用例。这对持续集成很有用。
-timeout, -t
指定超时门槛
Mocha 默认每个测试用例最多执行 2000 毫秒。如果 2000 毫秒后还没有执行完成,则报错。-t
可执行超时门槛。
Chai 断言库
Chai
是一个BDD/TDD
模式的大而全的断言库,可以在 node 和浏览器环境运行,可以高效的和任何 js 测试框架搭配使用。
安装
覆盖率
既然是给功能代码写单元测试,那就应该有个指标去衡量单元测试覆盖了哪些功能代码,这就是接下来要介绍的测试覆盖率。
在 Node.js
中,我们使用 istanbul
作为覆盖率统计的工具,istanbul
可以帮助我们统计到代码的语句覆盖率、分支覆盖率、函数覆盖率以及行覆盖率,生成的报告如下:
谢谢
版权声明: 本文为 InfoQ 作者【devpoint】的原创文章。
原文链接:【http://xie.infoq.cn/article/4b735a6c7a12ca7fed4b59a2e】。文章转载请联系作者。
评论