断言

稳定级别:3 - 锁定

断言模块提供了一个简单断言集,用于测试不变量。本模块原本是Node.js的内部使用,但也可以通过require('assert')在应用中使用。但是要注意,断言模块并不是一个测试框架,也不是一个通用的断言库。

断言模块的API已经锁定。意味着在未来,本模块应用和暴露的方法都不会有任何修改或者增加。

assert(value[, message])

v0.5.9版本加入

是assert.ok()的alias。

const assert = require('assert');assert(true);  // OK
assert(1);     // OK
assert(false);// throws "AssertionError: false == true"
assert(0);// throws "AssertionError: 0 == true"
assert(false, 'it\'s false');// throws "AssertionError: it's false"

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

v0.1.21版本加入

用于测试 actualexpected的深等于。基本数据类型的值将会用等价运算符( == )作比较。

本方法只适用于可枚举且返回自身的属性。 deepEqual()不能用于测试对象原型、附加符号、不可枚举的属性。这一点可能会导致一些意想不到的结果。比如,下面的例子不会抛出AssertionError,因为Error对象的属性是不可枚举的。

// WARNING: This does not throw an AssertionError!
assert.deepEqual(Error('a'), Error('b'));

”深”等于意味着:传入对象的子对象的可枚举且返回自身的属性也会被比较:

const assert = require('assert');const obj1 = {a : {b : 1}
};
const obj2 = {a : {b : 2}
};
const obj3 = {a : {b : 1}
};
const obj4 = Object.create(obj1);assert.deepEqual(obj1, obj1);// OK, 一个对象和自身肯定是相等的assert.deepEqual(obj1, obj2);// AssertionError: { a: { b: 1 } } deepEqual { a: { b: 2 } }// b的值不同assert.deepEqual(obj1, obj3);// OK, 两个对象是相等的assert.deepEqual(obj1, obj4);// AssertionError: { a: { b: 1 } } deepEqual {}// 对象原型不能用于比较

如果传入的两个参数不相等,将会抛出一个AssertionError,它会自带一个message属性,可由message传参设置。如果message传参是undefined,就会给它赋值一个默认的错误信息。

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

v1.2.0版本加入

assert.deepEqual()只有两个区别。第一,基本数据类型的值是用强等价运算符(===)来比较的。第二,对象之间的比较要求它们的原型(prototype)也一致。

如果传入的两个参数不相等,将会抛出一个AssertionError,它会自带一个message属性,可由message传参设置。如果message传参是undefined,就会给它赋值一个默认的错误信息。

assert.doesNotThrow(block, error)

v0.1.21版本加入

断言block方法不会抛出错误,关于抛出(throw)可参加assert.throw()了解更多细节。

assert.doesNotThrow()被调用的时候,它会立即调用block方法。

如果有错误抛出,并且错误类型与传参中的错误类型一致,此方法将抛出一个AssertionError。如果错误类型不一致,或者传参error未定义,那么错误会被回传给调用者。

比如下例中,将会抛出一个TypeError,因为错误类型不一致。

assert.doesNotThrow(() => {throw new TypeError('Wrong value');},SyntaxError
);

但下例中就会抛出AssertionError并附带message“Got unwanted exception (TypeError)..”。

assert.doesNotThrow(() => {throw new TypeError('Wrong value');},TypeError
);

当有AssertionError抛出的时候,如果传参中定义了message参数,那么它将会被附到AssertionErrormessage后面。

assert.doesNotThrow(() => {throw new TypeError('Wrong value');},TypeError,'Whoops'
);
// Throws: AssertionError: Got unwanted exception (TypeError). Whoops

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

v0.1.21版本加入

用等价运算符(==)比较actualexpected的浅等于。

const assert = require('assert');assert.equal(1, 1);// OK, 1 == 1
assert.equal(1, '1');// OK, 1 == '1'assert.equal(1, 2);// AssertionError: 1 == 2
assert.equal({a: {b: 1}}, {a: {b: 1}});//AssertionError: { a: { b: 1 } } == { a: { b: 1 } }

如果传入的两个参数不相等,将会抛出一个AssertionError,它会自带一个message属性,可由message传参设置。如果message传参是undefined,就会给它赋值一个默认的错误信息。

assert.fail(actual, expected, message, operator)

v0.1.21版本加入

抛出AssertionError。如果message也就是比较结果为假,那么错误信息输出actualexpected的值,用传入的运算符隔开;如果结果为真,错误信息输出传入的message

const assert = require('assert');assert.fail(1, 2, undefined, '>');// AssertionError: 1 > 2assert.fail(1, 2, 'whoops', '>');// AssertionError: whoops

assert.ifError(value)

v0.1.97版本加入

如果value为真则输出value值。适合用于测试回调方法中的error参数。

const assert = require('assert');assert.ifError(0); // OK
assert.ifError(1); // Throws 1
assert.ifError('error'); // Throws 'error'
assert.ifError(new Error()); // Throws Error

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

v0.1.21版本加入

测试深不等,与assert.deepEqual()对立。

const assert = require('assert');const obj1 = {a : {b : 1}
};
const obj2 = {a : {b : 2}
};
const obj3 = {a : {b : 1}
};
const obj4 = Object.create(obj1);assert.notDeepEqual(obj1, obj1);// AssertionError: { a: { b: 1 } } notDeepEqual { a: { b: 1 } }assert.notDeepEqual(obj1, obj2);// OK, obj1 and obj2 are not deeply equalassert.notDeepEqual(obj1, obj3);// AssertionError: { a: { b: 1 } } notDeepEqual { a: { b: 1 } }assert.notDeepEqual(obj1, obj4);// OK, obj1 and obj2 are not deeply equal

如果传入的两个参数深相等,将会抛出一个AssertionError,它会自带一个message属性,可由message传参设置。如果message传参是undefined,就会给它赋值一个默认的错误信息。

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

v1.2.0版本加入

测试深且强不等,与assert.deepStrictEqual()对立。

const assert = require('assert');assert.notDeepEqual({a:1}, {a:'1'});// AssertionError: { a: 1 } notDeepEqual { a: '1' }assert.notDeepStrictEqual({a:1}, {a:'1'});// OK

如果传入的两个参数深且强相等,将会抛出一个AssertionError,它会自带一个message属性,可由message传参设置。如果message传参是undefined,就会给它赋值一个默认的错误信息。

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

v0.1.21版本加入

用不等价运算符(!=)测试浅不等。

const assert = require('assert');assert.notEqual(1, 2);// OKassert.notEqual(1, 1);// AssertionError: 1 != 1assert.notEqual(1, '1');// AssertionError: 1 != '1'

如果传入的两个参数浅相等,将会抛出一个AssertionError,它会自带一个message属性,可由message传参设置。如果message传参是undefined,就会给它赋值一个默认的错误信息。

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

v0.1.21版本加入

用强不等运算符(!==)测试强不等。

const assert = require('assert');assert.notStrictEqual(1, 2);// OKassert.notStrictEqual(1, 1);// AssertionError: 1 != 1assert.notStrictEqual(1, '1');// OK

如果传入的两个参数强等,将会抛出一个AssertionError,它会自带一个message属性,可由message传参设置。如果message传参是undefined,就会给它赋值一个默认的错误信息。

assert.ok(value[, message])

v0.1.21版本加入

测试value是否为真。其实与assert.equal(!!value, true, message)等价。

如果value不为真,抛出AssertionError,附带message信息与传入message一致。如果message传参是undefined,就会给它赋值一个默认的错误信息。

const assert = require('assert');assert.ok(true);  // OK
assert.ok(1);     // OK
assert.ok(false);// throws "AssertionError: false == true"
assert.ok(0);// throws "AssertionError: 0 == true"
assert.ok(false, 'it\'s false');// throws "AssertionError: it's false"

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

v0.1.21版本加入

用强等运算符(===)测试传参是否强等于。

const assert = require('assert');assert.strictEqual(1, 2);// AssertionError: 1 === 2assert.strictEqual(1, 1);// OKassert.strictEqual(1, '1');// AssertionError: 1 === '1'

如果传入的两个参数不是强等,将会抛出一个AssertionError,它会自带一个message属性,可由message传参设置。如果message传参是undefined,就会给它赋值一个默认的错误信息。

assert.throws(block, error)

v0.1.21版本加入

期望block方法抛出错误。

如果传入自定义error,可以是构造函数、正则表达式或验证函数。

如果传入message但没有错误抛出,message将是AssertionError附带的。

用构造函数验证实例:

assert.throws(() => {throw new Error('Wrong value');},Error
);

用正则表达式验证error:

assert.throws(() => {throw new Error('Wrong value');},/value/
);

自定义error验证:

assert.throws(() => {throw new Error('Wrong value');},function(err) {if ( (err instanceof Error) && /value/.test(err) ) {return true;}},'unexpected error'
);

请注意error参数可以为字符串。如果第二个传参是个字符串,那么error参数将会被忽略,直接用这个字符串作为输出的message。但这可能会导致很容易被忽略的问题:

// THIS IS A MISTAKE! DO NOT DO THIS!
assert.throws(myFunction, 'missing foo', 'did not throw with expected message');// Do this instead.
assert.throws(myFunction, /missing foo/, 'did not throw with expected message');

全文目录

请查看:全文目录

【译文】Nodejs官方文档(Part 3 断言测试)相关推荐

  1. pythondocumentation_python官方文档

    广告关闭 腾讯云11.11云上盛惠 ,精选热门产品助力上云,云服务器首年88元起,买的越多返的越多,最高返5000元! 方便大家可以更多地了解python查阅到相关函数或者功能的用法. 01搜索引擎首 ...

  2. 006-基于hyperledger fabric1.4( 官方文档)编写第一个应用【外部nodejs调用】

    一.概述 官方原文地址 Writing Your First Application 如果对fabric网络的基本运行机制不熟悉的话,请看这里. 注意:本教程是对fabric应用以及如何使用智能合约的 ...

  3. 《Redis官方文档》用Redis构建分布式锁

    <Redis官方文档>用Redis构建分布式锁 用Redis构建分布式锁 在不同进程需要互斥地访问共享资源时,分布式锁是一种非常有用的技术手段. 有很多三方库和文章描述如何用Redis实现 ...

  4. TensorFlow 官方文档中文版发布啦(持续维护)

    TensorFlow 是 Google 研发的第二代人工智能学习系统,是 Google 为了帮助全球开发者们更加方便和高效地开发机器学习 (Machine Learning)和人工智能 (AI) 应用 ...

  5. TensorFlow 官方文档中文版发布啦(持续维护) 1

    TensorFlow 是 Google 研发的第二代人工智能学习系统,是 Google 为了帮助全球开发者们更加方便和高效地开发机器学习 (Machine Learning)和人工智能 (AI) 应用 ...

  6. AsyncDisplayKit官方文档个人翻译

    迁移老文章到掘金 文档比较老了,不适用最新的2.0 AsyncDisplayKit 官方文档 最近在拆解学习AsyncDisplayKit这个很知名的轮子,发现这个轮子内容还是非常庞大的,想要分解学习 ...

  7. javascript官方文档_基于Javascript编写的开源Markdown和HTML相互转换器——showdown

    介绍 showdown是一个基于Javascript编写的开源Markdown和HTML相互转换器,showdown可以用在客户端(浏览器)或者服务端(nodejs).shodown还支持原始规范中未 ...

  8. 2DToolkit官方文档中文版打地鼠教程(一):初始设置

    这是2DToolkit官方文档中 Whack a Mole 打地鼠教程的译文,为了减少文中过多重复操作的翻译,以及一些无必要的句子,这里我假设你有Unity的基础知识(例如了解如何新建Sprite等) ...

  9. pytest官方文档 6.2 中文翻译版(第十章):警告捕捉

    从3.1版本开始,pytest会在整个测试执行的过程中自动的捕捉警告: # content of test_show_warnings.py import warningsdef api_v1():w ...

  10. re python 引擎_转 python内置正则表达式(re)模块官方文档简要中文版

    学习正则表达式,最好的教材是<精通正则表达式>,而要精通NFA正则表达式,使用了NFA引擎的python正则模块官方文档就是最好的教材,大部分的功能同样在其他使用传统NFA引擎的正则包里受 ...

最新文章

  1. 摆动排序leetcode324
  2. exchange客户端不能正常登陆
  3. 学习Python中用numpy与matplotlib遇到的一些数学函数与函数的绘图
  4. 华为配备鸿蒙系统的手机,华为P50/新平板双双来袭!全球首发鸿蒙系统:配置都非常强悍...
  5. pip 更新版本失败问题解决
  6. 前端es6文档大全,你想要的这都有
  7. 魔兽世界单机mysql密码_魔兽世界单机版-Trinity-Core数据库表解释
  8. Node.js学习笔记(五)——WebSocket
  9. part2:服务器接收企业微信用户消息
  10. 金山打字通 右手练习
  11. java秒杀源码_Java秒杀系统实战系列~商品秒杀代码实战
  12. macOS 虚拟摄像头:CamTwist for Mac
  13. 手机做web服务器 无限流量,无限流量卡和手机随身无线wifi,你选择哪一个?
  14. centeros7命令汇总
  15. GPS与GPRS模块功差之千里
  16. 顺序表倒置java_倒置顺序表
  17. 如何在 Ubuntu Linux 上安装 CUPS 打印服务器?
  18. 英语动名词用法及实例讲解
  19. keyshot渲染图文教程_Keyshot 渲染视频教程 入门到精通实用实例教材全套
  20. 使用“PC定时执行专家”,提高你的工作效率

热门文章

  1. python:argsort(返回元素排序后的索引值)
  2. php视图,PHP的Yii框架中View视图的使用进阶
  3. c语言双精度型输出小数位数_C语言的double与float类型最多只能默认输出小数位数都取6位?...
  4. android listview固定内容,Android ListView 列表分隔,条目中添加分类信息(文字,图片等)...
  5. Matplotlib--legend函数
  6. 2017-5-26 正则表达式,js实战(加减数量,全选)
  7. 170319 剑指offer 1.把一个字符串转化成整数(简单问题的全面性考虑)
  8. Cordova框架基本原理
  9. Android面试问题收集总结
  10. 使用tuned/tuned-adm工具动态调优你的CentOS系统