nodeJs的assert用法及其总结一

assert-断言模块提供了断言测试的函数,用于测试不变式。对其中常用的一些断言函数的介绍,包括值比较和函数错误抛出断言

  • 用于比较值的断言函数

1.assert.equal(actual, expected[, message]),此函数是判断实际值(actual)与期望徝(expected)是否相等“==”,如果不相等,则抛出一个message的错误。此种比较是经过类型转化后的比较:

 const assert = require('assert');
   
assert.equal(1, 1);
 // 测试通过
assert.equal(1, '1');
 // 测试通过
assert.equal(1, 2);
 AssertionError [ERR_ASSERTION]: 1 == 2
 assert.equal({ [1] }, { [1] });
// AssertionError [ERR_ASSERTION]:  [ 1 ] == [ 1 ]
 assert.equal({ a: { b: 1 } }, { a: { b: 1 } });
// AssertionError [ERR_ASSERTION]: { a: { b: 1 } } == { a: { b: 1 } }
复制代码

注:assert.equal(actual, expected[, message]),比较范围只能是js中的基本数据类型比较,不能用作引用数据类型比较。

2.assert.strictEqual(actual, expected[, message])此函数是判断实际值(actual)与期望徝(expected)是否相等“===”,如果不相等,则抛出一个message的错误。此种比较是不经过类型转化后的比较:

const assert = require('assert').strict;

assert.strictEqual(1, 2);
// AssertionError [ERR_ASSERTION]:   1 ==  2

assert.strictEqual(1, 1);
// 测试通过。

assert.strictEqual(1, '1');
// AssertionError [ERR_ASSERTION]:   1 ==  '1'
 assert.equal({ [1] }, { [1] });
// AssertionError [ERR_ASSERTION]:  [ 1 ] == [ 1 ]
 assert.equal({ a: { b: 1 } }, { a: { b: 1 } });
// AssertionError [ERR_ASSERTION]: { a: { b: 1 } } == { a: { b: 1 } }
复制代码

注:assert.strictEqual(actual, expected[, message]),比较范围只能是js中的基本数据类型比较,不能用作引用数据类型比较。

3.assert.deepEqual(actual, expected[, message]),此函数是判断实际值(actual)与期望徝(expected)子对象的可枚举属性也会被列入比较。如果本身属性及子对象属性都相等时通过。否则会抛出错误,如果不相等,则抛出一个message的错误。

const assert = require('assert');

assert.deepEqual(1, 1);
// 测试通过。
assert.deepEqual({a:{d:2}}, {a:{d:2}});
// 测试通过。
assert.deepEqual({a:{d:2}}, {a:{d:'2'}});
// 测试通过。
assert.deepEqual([1,2,3], [1,2,3]);
// 测试通过。
assert.deepEqual({a:{d:2}}, {a:{d:3}});
//AssertionError [ERR_ASSERTION]: { a: { d: 2 } } deepEqual { a: { d: 3 }
}

复制代码

注:assert.deepEqual(actual, expected[, message]),比较范围既能是js中的基本数据类型比较,也能用作引用数据类型比较但是枚举后对值是一种'=='比较。

4.assert.deepStrictEqual(actual, expected[, message]),此函数是判断实际值(actual)与期望徝(expected)子对象的可枚举属性也会被列入比较。如果本身属性及子对象属性都相等时通过。否则会抛出一个message的错误。

const assert = require('assert');

assert.deepStrictEqual({a:1},{a:'1'})
//AssertionError [ERR_ASSERTION]: { a: 1 } deepStrictEqual { a: '1' }

const date = new Date();
const object = {};
const fakeDate = {};
Object.setPrototypeOf(fakeDate, Date.prototype);

// 原型不同:
//assert.deepStrictEqual(object, fakeDate);
AssertionError [ERR_ASSERTION]: 2018-06-03T11:32:54.753Z deepStrictEqual Date {}

// 类型标签不同:一个为时间实例,一个为对象
assert.deepStrictEqual(date, fakeDate);
AssertionError [ERR_ASSERTION]: 2018-06-03T13:58:40.087Z deepStrictEqual Date {}
//NaN的比较,特别注意
assert.deepStrictEqual(NaN, NaN);
// 通过,因为使用的是 SameValue 比较法。

// 解封装后的数值不同:
assert.deepStrictEqual(new Number(1), new Number(2));
AssertionError [ERR_ASSERTION]: [Number: 1] deepStrictEqual [Number: 2]

assert.deepStrictEqual(new String('foo'), Object('foo'));
// 通过,因为对象与解封装后的字符串都完全相同。

复制代码
  • 块状函数测试抛出错误

1.assert.throws(block[, error][, message]),block 为一个函数,block 函数会抛出错误,error 可以是 Class、RegExp、校验函数、每个属性都会被测试是否深度全等的校验对象、或每个属性(包括不可枚举的 message 和 name 属性)都会被测试是否深度全等的错误实例。 当使用对象时,可以使用正则表达式来校验字符串属性。 详见下面的例子。 如果指定了 message 参数,则当 block 函数不抛出错误时,message 参数会作为 AssertionError 的错误信息。

const err = new TypeError('错误信息');
err.code = 404;
err.foo = 'bar';
err.info = {
  nested: true,
  baz: 'text'
};
err.reg = /abc/i;

assert.throws(
  () => {
    throw err;
  },
  {
    name: 'TypeError',
    message: '错误信息'
    info: {
      nested: true,
      baz: 'text'
    }
    // 注意,只有校验对象的属性会被测试。
    // 使用嵌套的对象必须提供全部属性,否则校验会失败。 
  }
);

// 使用正则表达式来校验错误属性:
assert.throws(
  () => {
    throw err;
  },
  {
    // `name` 和 `message` 属性为字符串,对它们使用正则表达式进行匹配。
    // 如果校验失败,则抛出错误。
    name: /^TypeError$/,
    message: /错误信息/,
    foo: 'bar',
    info: {
      nested: true,
      // 嵌套的属性不可以使用正则表达式!
      baz: 'text'
    },
    // `reg` 属性包含了一个正则表达式,只有校验对象也包含一个完全相同的正则表达式时,校验才会通过。
    reg: /abc/i
  }
);
复制代码

转载于:https://juejin.im/post/5b135515f265da6e1d6ca188

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值