Mocha-单元测试
关于 Mocha
Mocha
是JavaScript
的一种单元测试框架,既可以在浏览器
环境下运行,也可以在Node.js
环境下运行。使用Mocha
,我们就只需要专注于编写单元测试本身,然后,让Mocha
去自动运行所有的测试,并给出测试结果。
Mocha 的特点:
- 既可以测试简单的JavaScript函数,又可以测试异步代码,因为异步是JavaScript的特性之一;
- 可以自动运行所有测试,也可以只运行特定的测试;
- 可以支持before、after、beforeEach和afterEach来编写初始化代码。
Mocha 的使用
安装
1 | # 全局安装 |
使用
add.js
1 | function add(x, y) { |
测试脚本 add.test.js
1 | var add = require('./add.js'); |
测试脚本与所要测试的源码脚本同名,但是后缀名为 .test.js
(表示测试).
测试脚本里面应该包括一个或多个 describe
块,每个 describe
块应该包括一个或多个 it
块。
describe
块称为”测试套件”(test suite),表示一组相关的测试。它是一个函数,第一个参数是测试套件的名称(”加法函数的测试”),第二个参数是一个实际执行的函数。
it
块称为”测试用例”(test case),表示一个单独的测试,是测试的最小单位。它也是一个函数,第一个参数是测试用例的名称(”1 加 1 应该等于 2”),第二个参数是一个实际执行的函数。
1 | //断言 |
所谓”断言”,就是判断源码的实际执行结果与预期结果是否一致,如果不一致就抛出一个错误。上面这句断言的意思是,调用add(1, 1),结果应该等于2。
所有的测试用例( it
块)都应该含有一句或多句的断言。它是编写测试用例的关键。断言功能由断言库来实现,Mocha本身不带断言库,所以必须先引入断言库。
1 | var expect = require('chai').expect; |
断言库有很多种,Mocha并不限制使用哪一种。上面代码引入的断言库是 chai
,并且指定使用它的 expect
断言风格.
使用命令
1 | "scripts": { |
1 | npm test # Mocha 默认运行 test 子目录里面的测试脚本, test目录的子目录里面的测试脚本不会运行 |
关于异步
Mocha
默认每个测试用例最多执行 2000
毫秒.
1 | # 改变默认的超时设置 |
Mocha
内置对 Promise
的支持,允许直接返回 Promise
,等到它的状态改变,再执行断言,而不用显式调用 done
方法。
测试用例的钩子
1 | describe('hooks', function() { |
测试用例管理
大型项目有很多测试用例, 有时,我们希望只运行其中的几个,这时可以用 only
方法。describe
块和 it
块都允许调用 only
方法,表示只运行某个测试套件或测试用例。
此外,还有 skip
方法,表示跳过指定的测试套件或测试用例。
断言
所谓”断言”,就是判断源码的实际执行结果与预期结果是否一致.
所有的测试用例(it块)都应该含有一句或多句的断言, 它是编写测试用例的关键。断言功能由断言库来实现,Mocha本身不带断言库,所以必须先引入断言库。
断言库有很多种,Mocha并不限制使用哪一种。上面代码引入的断言库是 chai
,并且指定使用它的 expect
断言风格。
基本上,expect
断言的写法都是一样的。头部是 expect
方法,尾部是 断言方法,比如 equal、a/an、ok、match
等。两者之间使用 to
或to.be
连接。