简介
mocha是一款功能丰富的javascript单元测试框架,它既可以运行在nodejs环境中,也可以运行在浏览器环境中。javascript是一门单线程语言,最显著的特点就是有很多异步执行。同步代码的测试比较简单,直接判断函数的返回值是否符合预期就行了,而异步的函数,就需要测试框架支持回调、promise或其他的方式来判断测试结果的正确性了。mocha可以良好的支持javascript异步的单元测试。mocha会串行地执行我们编写的测试用例,可以在将未捕获异常指向对应用例的同时,保证输出灵活准确的测试结果报告。
安装
npm install mocha -g简单的例子
var assert = require('assert')
describe('Array', function() {
describe('#indexOf()', function() {
it('should return -1 when the value is not present', function() {
assert.equal(-1, [1, 2, 3].indexOf(4))
})
})
})
在终端中运行后如出现下面结果则为通过:
Array
#indexOf()
✓ should return -1 when the value is not present
1 passing (9ms)
一个简单的测试包含describe和it,describe声明了一个TestSuit(测试集合) ,而且测试集合可以嵌套管理,而it声明定义了一个具体的测试用例。
assert为断言库,除了assert还有如下几种,Mocha允许你使用你喜欢的断言库
- should.js - BDD风格贯穿始终
- expect.js - expect() 风格的断言
- chai - expect()、assert()和 should风格的断言
- better-assert - C风格的自文档化的assert()
- unexpected - “可扩展的BDD断言工具”
assert断言库
首先先引入断言assert模块
var assert = require('assert');
1.assert(value[, message]) assert.ok() 的别名。
- value 要检查是否为真的值。
- message |
assert.ok(true); 同 assert(true)
// 测试通过。
assert.ok(false, '不是真值'); 同 assert(false, '不是真值')
// 抛出 AssertionError: 不是真值
2.assert.equal(actual, expected[, message])
assert.equal(1, 1);
// OK, 1 == 1
assert.equal(1, '1');
// OK, 1 == '1'
assert.equal(1, 2);
// AssertionError: 1 == 2
assert.equal({ a: { b: 1 } }, { a: { b: 1 } });
// AssertionError: { a: { b: 1 } } == { a: { b: 1 } }
3.assert.fail([message])
- message | 默认为 'Failed'。
抛出 AssertionError,并带上提供的错误信息或默认的错误信息。 如果 message 参数是 Error 的实例,则会抛出它而不是 AssertionError。
const assert = require('assert').strict;
assert.fail();
// 抛出 AssertionError [ERR_ASSERTION]: Failed
assert.fail('失败');
// 抛出 AssertionError [ERR_ASSERTION]: 失败
assert.fail(new TypeError('失败'));
// 抛出 TypeError: 失败