位置: 编程技术 - 正文

node.js学习之断言assert的使用示例(node断点调试)

编辑:rootadmin

推荐整理分享node.js学习之断言assert的使用示例(node断点调试),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:nodejs断点调试,nodejs join,nodejs断点续传,node断点调试,nodejs断点调试,nodejs断点续传,node 断言,node 断言,内容如对您有帮助,希望把文章链接给更多的朋友!

一. 简介

断言是编程术语,表示为一些布尔表达式,程序员相信在程序中的某个特定点该表达式值为真,可以在任何时候启用和禁用断言验证,因此可以在测试时启用断言而在部署时禁用断言。同样,程序投入运行后,最终用户在遇到问题时可以重新启用断言。

使用断言可以创建更稳定、品质更好且 不易于出错的代码。当需要在一个值为FALSE时中断当前操作的话,可以使用断言。【单元测试】必须使用断言。

Node提供了 多个断言测试的函数,用于测试不变式,我在文章中中将这 多个函数进行了分组,方便理解记忆。

【提示】在本文章中,expected 代表预期值,actual 代表实际值, message 代表自定义信息

二. 判断值是否为真值

判断值是否为真值有以下两个断言测试函数

2.1 assert(value[, message])

这个测试函数在 【Boolean(value)】 为 【true】时通过断言测试,否则抛出 【AssertionError】

上面一段代码由于【Boolean(value)】全部为 true,所以全部通过断言测试

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

上面代码由于没有指定【message】参数,抛出的为默认错误信息的【AssertionError】

2.2 assert.ok(value[, message])

assert.ok() 与 assert()的作用是一样的,都是测试【value】是否为真值。而且用法也一样,所以可以将assert()视为assert.ok()的语法糖

上面代码【Boolean(value)】全部为 true,所以全部断言通过,下面是断言不通过的情况,分别列出了默认错误信息

三. 判断预期值和实际值相等(==)

这一组里面有两个测试函数,用于测试预期值与实际值是否相等,如果相等则断言通过,否则抛出 【AssertionError】

3.1 assert.equal(actual, expected[, message])

assert.equal()用于测试期望值和实际值是否相等,【在值类型的时候比较的是两个值是否相等,当预期值和实际值为引用类型的时候,比较的是值得引用】

上面代码是对值类型进行的比较,说明equal()在内部使用的是(==),而非严格相等,待会儿我会总结到严格相等(===)

上面三个表达式都会抛出【message】属性值为'AssertionError'的【AssertionError】对象,【所以当值为引用类型的时候,equal()比较的是值得引用,因此两个引用类型的值是没法通过equal()断言的】

上面代码由于比较的是同一个对象,两个值得引用相等,所以断言通过。

3.2 assert.deepEqual(actual, expected[, message])

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

上面是对值类型进行的比较,和equal()没有任何的区别

上面代码是对引用类型的比较,可以看出【deepEqual() 】比较的是属性值,而非引用,这是与equal()不同的地方。

【注意!!】deepEqual()只测试可枚举的自身属性,不测试对象的原型、连接符、或不可枚举的属性(这些情况使用 assert.deepStrictEqual() ,稍后会总结到)

上面代码中 son1 和 son2 分别继承与两个不同的对象,都拥有 name 为 “Summer” 的属性,最后的的结果是通过,说明【deepEqual()不测试对象的原型】

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

四. 判断预期值和实际值全等(===)

这组测试函数是用于判断预期值和实际值是否深度相等的,内部使用的是(===),所以对象的原型也会进行比较,值得类型也是比较的范围。这组也有两个测试函数。

4.1 assert.deepStrictEqual(actual, expected[, message])

由于内部使用的是全等(===),所以对象的原型也会计入比较的范围

上面代码使用了deepEqual()和deepStrictEqual()进行了断言测试,son1 和 son2 分别继承与两个不同的对象,但是拥有相同的属性值。可以看出【deepEqual()是不会考虑对象的原型的,deepStrictEqual()将原型对象列入了比较对象】

4.2 assert.strictEqual(actual, expected[, message])

strictEqual()是equal()的加强,考虑了数据类型;如果actual === expected,则断言通过,否则抛出AssertionError,message&#;message:默认错误信息。

【提示!!】对引用类型还是永远通不过【strictEqual()】断言测试

五. 判断预期值和实际值不相等(!=)

上面总结到了判断预期值和实际值相等,这儿总结一下判断预期值和实际值不想等的两个测试函数,实际上就是上面 (三) 的逆运算。

5.1 assert.notEqual(actual, expected[, message])

【notEqual()】为 【equal() 】的逆运算,如果 actual!= expected 则断言通过,同样对于值类型是单纯对值进行比较,对应引用类型比较的是值得引用

上面代码是对值类型进行的比较,第三个表达式的默认信息可以看出内部使用的是(!=)

node.js学习之断言assert的使用示例(node断点调试)

上面的代码是对引用类型进行的断言测试,【notEqual() 】对于两个对象的测试通过是一个【恒成立】的结果。

5.2 assert.notDeepEqual(actual, expected[, message])

【notDeepEqual() 】为 【deepEqual() 】的逆运算,如果 actual!= expected 则断言通过,不同于notEqual()的是对于引用类型是对值进行判断,不比对原型、不可枚举属性,只比对自有可枚举属性,断言通过。

上面代码中最后一个表达式断言通过,说明【不比对原型、不可枚举属性,只比对自有可枚举属性】

【注意!!】与notEqual的区别,也就是deepEqual和equal的区别,在引用数据类型的时候,deepEqual是比较的值而非引用,equal对比的是引用,所以引用类型在equal的时候是永远无法通过断言测试的,以此类推,引用类型在notEqual时是永远否可以通过断言测试的。

六. 判断预期值和实际值严格不相等(!==)

上面总结到了判断预期值和实际值严格相等,这儿总结一下判断预期值和实际值严格不相等的两个测试函数,实际上就是上面 (四) 的逆运算

6.1 assert.notStrictEqual(actual, expected[, message])

如果actual与expected不 !== 则断言通过, 与 assert.deepStrictEqual() 相反

上面代码是对值类型进行的断言测试,可以看出【notStrictEqual() 】考虑了数据类型

上面代码是对引用类型的测试,全部通过,以上表达式是恒通过的。

6.2 assert.notDeepStrictEqual(actual, expected[, message])

notDeepStrictEqual()就是deepStrictEqual()的逆运算,如果 actual !== expected 则断言通过,否则抛出AssertionError。

七. 断言错误并抛出

这一组有 四 个(可以说是 三 个)测试函数,是对错误进行的处理。

7.1 assert.fail(message)

这个测试函数不多说,可以看错是下一个函数的重载,用于主动抛出带有【message】属性的【AssertionError】对象

7.2 assert.fail(actual, expected[, message[, operator[, stackStartFunction]]])

该测试函数用于主动抛出自定义错误信息,抛出错误信息格式:【actual 参数 + operator 参数 + expected 参数】

上面代码不提供【message】和【operator】,则【operator】默认为 【!=】

上面代码提供【message】,这时候 【actual】、【operator】、【expected】等参数会被列入错误对象属性中

上面代码是【message】为 undefined 时,会检测【operator】参数,【operator&#;operator:undefined 】

7.3 assert.throws(block,error, message)

参数说明:

block | Function

error | RegExp | Function

message | any

【说明!!】如果block抛出的错误满足error参数,也就是抛出错误与期望一致,则断言通过,否则抛出block中的错误,如果block不抛出错误,则抛出【AssertionError 】。

【提示!!】error 参数可以是构造函数、正则表达式、或自定义函数。

上面代码中 error 参数为构造函数,【block】抛出的错误与预期的一致,所以断言通过。

上面代码中 error 参数为正则表达式,【block】抛出的错误满足正则表达式,所以断言通过。

【注意!!】error 参数不能是字符串。 如果第二个参数是字符串,则视为省略 error 参数,传入的字符串会被用于 【message】 参数,

下面代码,【error】 参数为自定义函数

7.4 assert.doesNotThrow(block, error, message)

【说明!!】预期的错误和实际的错误一致时,不抛出实际错误,抛出AssertionError,不一致则抛出实际错误信息

以上例子会抛出 TypeError,因为在断言中没有匹配的错误类型

以上例子会抛出一个带有 Got unwanted exception (TypeError).. 信息的 AssertionError

上面代码说明:如果抛出了 AssertionError 且有给 message 参数传值,则 message 参数的值会被附加到 AssertionError 的信息中

八. 判断值是否为真

这儿只有一个测试函数了

8.1 assert.ifError(value)

如果value的值为真或者可以转换成true,则抛出value,否则断言通过。

上面代码中是直接给出的 布尔 类型的值,如果值为 true 则会将该值抛出,否则什么也不做

上面代码中全部是通过 Boolean(value) 转换之后再进行的测试,利用这个特性我们可以将此测试函数用于测试回调函数的 error 参数。

总结

标签: node断点调试

本文链接地址:https://www.jiuchutong.com/biancheng/379537.html 转载请保留说明!

上一篇:node.js学习之事件模块Events的使用示例(node.js实战)

下一篇:Node.js利用断言模块assert进行单元测试的方法(node语句)

  • 可税前扣除的费用有哪些
  • 收到股东投资款怎么做账
  • 社保阶段性减免延长到年底
  • 住宿费收入缴纳标准
  • 企业增资后需要交什么税
  • 股东投资是所有者权益
  • 企业会计制度固定资产保险费
  • 可转债如何不转换的财务处理
  • 公允价值模式下,投资性房地产不计提折旧或摊销
  • 专项附加扣除项目的6项具体规定有哪些
  • 当月已抵扣的专用发票能作废吗
  • 没有报关单货物违法吗
  • 电子发票和网络发票的区别和联系
  • 抵款车辆低价卖给职工账务处理:
  • 以股权投资入股放高利贷违法吗
  • 库存商品公司自己用怎么下账
  • 费用报销凭证是出纳的吗
  • 增值税价外费用如何开票
  • 税务系统出问题怎么办
  • 为他人提供纳税担保, 你的责任都清楚了吗?
  • 上个月没有报个税这个月一起报
  • 坏账收回的账务处理方法
  • 福利费专票进项转出怎么做账
  • 旅游业企业所得税要求
  • 库存现金与实际不符怎么调
  • 存货跌价准备的分录
  • 怎么免费获取百度文库的付费文档
  • 奖金扣税标准税率表
  • 增值税留抵税额在借方还是贷方
  • 华为应用市场被锁了,怎么解除密码
  • win10专业版怎样连接wifi
  • 巴黎先贤祠的名言
  • 出租不动产增值税纳税义务发生时间
  • 如何写php守护进程数据
  • elementui常用组件有哪些
  • react 刷新
  • 一般纳税人简易计税
  • 电子汇票追索是什么意思
  • Python 高性能 pdf
  • 业务招待费会计和税法差异
  • 前端部署发布项目有哪些
  • cvpr2021论文列表
  • 存放中央银行款项借方表示什么意思
  • python如何将字典中的键值互换
  • 企业什么时候才能按工龄退休
  • 个人所得税如何查询
  • 抽烟罚款会计分录
  • 预收账款的销售分录
  • mysql主键语句
  • 其他应收款可以直接平账吗
  • sql查看日志
  • linux mysql 安装与操作
  • MySQL/Postgrsql 详细讲解如何用ODBC接口访问MySQL指南
  • 拍卖车牌收入需要缴纳什么税
  • 本年利润的会计分录怎么做
  • 进出口 外汇
  • 施工总包能分包土方吗
  • 个人所得税手续费返还政策文件
  • 品牌代理费计入什么科目
  • 技术服务费发票怎么开
  • 组织机构代码证和统一社会信用代码的关系
  • 保险由承租方还是出租方承担
  • 税务登记证办理流程
  • 解读分布式光伏开发前期工作要点及措施
  • 电脑windowsxp无法启动怎么办
  • mac的qq缓存在哪里怎么打开
  • mac键盘图标与对应不匹配
  • 安装centos6.10
  • windows xp开始菜单桌面图标消失
  • 如何给windowsXP磁盘加密码
  • win8系统硬盘怎样分区
  • js的上传文件
  • cocos2dx schedule
  • node.js alert
  • node.js 的适用场景?
  • python如何获取
  • 税收征管法规定税务机关在税款征收中可以采取哪些措施
  • 江苏电子税务局社保缴费打印
  • 四川省地方税务局2017年1号公告
  • 什么是减税政策
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设