assert库是nodejs中的一个工具库, 主要用于测试模块,这个在自动化测试框架中用的最多。 具体的用法可以参见官方文档:
https://nodejs.org/api/assert.html
大致的用法可以分为下面几个部分:
- 测试是否相等,这类接口与方法最多,以assert, assert.ok, assert.deepEqual, assert.deepStrictEqual, assert.equal,assert.strictEqual等,主要从是相当/不相等, ==/===角度去比较
- 测试是否抛出异常: assert.throws和assert.doesNotThrow,测试一个代码段是否会有异常,assert.ifError为直接测试值是否为真而抛出异常
- 帮助函数: assert.fail,,assert.AssertionError
这里就分析具体的源码 assert.js。
接口导出与帮助函数
assert模块导出的都是一些方法(函数),其实主要就是assert,请看下面的源代码
// 1. The assert module provides functions that throw
// AssertionError's when particular conditions are not met. The
// assert module must conform to the following interface.
// 也就是说assert模块提供抛出AssertionError当某些条件不成立的时候
// 其导出的接口为assert变量。
var assert = module.exports = ok;
// 2. The AssertionError is defined in assert.
// new assert.AssertionError({ message: message,
// actual: actual,
// expected: expected })
// 该函数就是该模块测试后,显示异常的函数,该函数是该模块最后显示异常的帮助函数
// options含有如下属性:
// @actual, 实际值
// @expected,期望值
// @operator,操作符,一般是 ==, === 或者其他表示比较的文字
// @message, 需要显示的消息
assert.AssertionError = function AssertionError(options) {
this.name = 'AssertionError';
this.actual = options.actual;
this.expected = options.expected;
this.operator = options.operator;
// 当有消息时, 其实actual和expected 等是没有被用到的
if (options.message) {
this.message = options.message;
this.generatedMessage = false;
} else {
this.message = getMessage(this);
this.generatedMessage = true;
}
var stackStartFunction = options.stackStartFunction || fail;
// 获取当前的堆栈信息,stackStartFunction是开始函数(从开始函数的堆栈信息)
Error.captureStackTrace(this, stackStartFunction);
};
// assert.AssertionError instanceof Error
//这里表示assert.AssertionError函数继承了Error里的属性
// Error应该是平台定义的一个函数,可以获取当前的堆栈信息。
util.inherits(assert.AssertionError, Error);
// 获取当前需要显示的消息,可以看出,主要是由 实际的, 期望的与操作符的值进行比较。
function getMessage(self) {
return truncate(util.inspect(self.actual, {depth: null}), 128) + &#