node.js学习之断言assert的使用

一、断言是编程术语 , 表示为一些布尔表达式 , 程序员相信在程序中的某个特定点该表达式值为真 , 可以在任何时候启用和禁用断言验证 , 因此可以在测试时启用断言而在部署时禁用断言 。 同样 , 程序投入运行后 , 最终用户在遇到问题时可以重新启用断言 。
使用断言可以创建更稳定、品质更好且 不易于出错的代码 。 当需要在一个值为FALSE时中断当前操作的话 , 可以使用断言 。 【单元测试】必须使用断言 。
Node提供了 10 多个断言测试的函数 , 用于测试不变式 , 我在文章中中将这 10 多个函数进行了分组 , 方便理解记忆 。
【提示】在本文章中 , expected 代表预期值 , actual 代表实际值 ,  message 代表自定义信息
工具/原料JavaScript
方法/步骤1二、判断值是否为真值
判断值是否为真值有以下两个断言测试函数
2.1 assert(value[, message])
这个测试函数在 【Boolean(value)】 为 【true】时通过断言测试 , 否则抛出 【AssertionError】

node.js学习之断言assert的使用

文章插图

2上面代码中 value 为false , 则抛出一个带有 message 属性的 【AssertionError】 , 其中 message 属性的值等于传入的 message 参数的值 。 【如果 message 参数为 undefined , 则赋予默认的错误信息】 。

node.js学习之断言assert的使用

文章插图

3上面代码由于没有指定【message】参数 , 抛出的为默认错误信息的【AssertionError】
2.2 assert.ok(value[, message])
assert.ok() 与 assert()的作用是一样的 , 都是测试【value】是否为真值 。 而且用法也一样 , 所以可以将assert()视为assert.ok()的语法糖

node.js学习之断言assert的使用

文章插图

4三、判断预期值和实际值相等(==)
这一组里面有两个测试函数 , 用于测试预期值与实际值是否相等 , 如果相等则断言通过 , 否则抛出 【AssertionError】
3.1 assert.equal(actual, expected[, message])
assert.equal()用于测试期望值和实际值是否相等 , 【在值类型的时候比较的是两个值是否相等 , 当预期值和实际值为引用类型的时候 , 比较的是值得引用】

node.js学习之断言assert的使用

文章插图

53.2 assert.deepEqual(actual, expected[, message])
同样也是测试 预期值 和 实际值 是否相等 , 使用的仍然是(==) , 但是与equal不同的是 , 【deepEqual()在对引用类型进行比较的时候 , 不是对值的引用进行比较 , 而是比较的对象的属性值】

node.js学习之断言assert的使用

文章插图

6上面代码是对引用类型的比较 , 可以看出【deepEqual() 】比较的是属性值 , 而非引用 , 这是与equal()不同的地方 。
【注意!!】deepEqual()只测试可枚举的自身属性 , 不测试对象的原型、连接符、或不可枚举的属性(这些情况使用 assert.deepStrictEqual()  , 稍后会总结到)

node.js学习之断言assert的使用

文章插图

7上面代码中 ena 和 enb 用于相同的可枚举属性【name】 , 有着值不同的不可枚举属性【hobby】 , 说明【deepEqual()不测试对象的不可枚举的属性】

推荐阅读