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】。文章转载请联系作者。











评论