Nodejs源码分析之assert

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) + &#
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值