Mocha-单元测试

 发布 : 2019-02-28  字数统计 : 1.3k 字  阅读时长 : 4 分  分类 : 测试  浏览 :

关于 Mocha

MochaJavaScript 的一种单元测试框架,既可以在 浏览器 环境下运行,也可以在 Node.js 环境下运行。使用 Mocha ,我们就只需要专注于编写单元测试本身,然后,让 Mocha 去自动运行所有的测试,并给出测试结果。

Mocha 的特点:

  • 既可以测试简单的JavaScript函数,又可以测试异步代码,因为异步是JavaScript的特性之一;
  • 可以自动运行所有测试,也可以只运行特定的测试;
  • 可以支持before、after、beforeEach和afterEach来编写初始化代码。

Mocha 的使用

安装

1
2
3
4
5
6
7
8
# 全局安装
npm install mocha -g

# 安装 mocha
npm install --save-dev mocha

# 安装chai-断言 也可选择其它
npm install --save-dev chai

使用

add.js

1
2
3
4
function add(x, y) {
return x + y;
}
module.exports = add;

测试脚本 add.test.js

1
2
3
4
5
6
7
8
var add = require('./add.js');
var expect = require('chai').expect;

describe('加法函数的测试', function() {
it('1 加 1 应该等于 2', function() {
expect(add(1, 1)).to.be.equal(2);
});
});

测试脚本与所要测试的源码脚本同名,但是后缀名为 .test.js(表示测试).

测试脚本里面应该包括一个或多个 describe 块,每个 describe 块应该包括一个或多个 it 块。

describe 块称为”测试套件”(test suite),表示一组相关的测试。它是一个函数,第一个参数是测试套件的名称(”加法函数的测试”),第二个参数是一个实际执行的函数。

it 块称为”测试用例”(test case),表示一个单独的测试,是测试的最小单位。它也是一个函数,第一个参数是测试用例的名称(”1 加 1 应该等于 2”),第二个参数是一个实际执行的函数。

1
2
//断言
expect(add(1, 1)).to.be.equal(2)

所谓”断言”,就是判断源码的实际执行结果与预期结果是否一致,如果不一致就抛出一个错误。上面这句断言的意思是,调用add(1, 1),结果应该等于2。

所有的测试用例( it 块)都应该含有一句或多句的断言。它是编写测试用例的关键。断言功能由断言库来实现,Mocha本身不带断言库,所以必须先引入断言库。

1
var expect = require('chai').expect;

断言库有很多种,Mocha并不限制使用哪一种。上面代码引入的断言库是 chai,并且指定使用它的 expect 断言风格.

使用命令

1
2
3
4
5
"scripts": {
"test": "mocha",
"test-all" : "mocha --recursive",
"test-js": "mocha *.test.js"
},
1
2
3
npm test         # Mocha 默认运行 test 子目录里面的测试脚本, test目录的子目录里面的测试脚本不会运行
npm run test-all # Mocha 默认运行 test 子目录里面的测试脚本, test下所有,包含子目录
npm run test-js # Mocha 运行所有根目录下 以 .test.js 的测试脚本

关于异步

Mocha 默认每个测试用例最多执行 2000 毫秒.

1
2
# 改变默认的超时设置
mocha -t 5000 timeout.test.js

Mocha 内置对 Promise 的支持,允许直接返回 Promise,等到它的状态改变,再执行断言,而不用显式调用 done 方法。

测试用例的钩子

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
describe('hooks', function() {
before(function() {
// 在本区块的所有测试用例之前执行
});

after(function() {
// 在本区块的所有测试用例之后执行
});

beforeEach(function() {
// 在本区块的每个测试用例之前执行
});

afterEach(function() {
// 在本区块的每个测试用例之后执行
});

// test cases
});

测试用例管理

大型项目有很多测试用例, 有时,我们希望只运行其中的几个,这时可以用 only 方法。describe 块和 it 块都允许调用 only 方法,表示只运行某个测试套件或测试用例。

此外,还有 skip 方法,表示跳过指定的测试套件或测试用例。

断言

所谓”断言”,就是判断源码的实际执行结果与预期结果是否一致.

所有的测试用例(it块)都应该含有一句或多句的断言, 它是编写测试用例的关键。断言功能由断言库来实现,Mocha本身不带断言库,所以必须先引入断言库。

断言库有很多种,Mocha并不限制使用哪一种。上面代码引入的断言库是 chai,并且指定使用它的 expect 断言风格。

基本上,expect 断言的写法都是一样的。头部是 expect 方法,尾部是 断言方法,比如 equal、a/an、ok、match 等。两者之间使用 toto.be 连接。

具体demo

参考

留下足迹