摘要:断言稳定级别锁定断言模块提供了一个简单断言集,用于测试不变量。但是要注意,断言模块并不是一个测试框架,也不是一个通用的断言库。断言模块的已经锁定。版本加入测试深且强不等,与对立。版本加入测试是否为真。
断言
稳定级别: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版本加入
用于测试 actual和expected的深等于。基本数据类型的值将会用等价运算符( == )作比较。
本方法只适用于可枚举且返回自身的属性。 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参数,那么它将会被附到AssertionError的message后面。
assert.doesNotThrow( () => { throw new TypeError("Wrong value"); }, TypeError, "Whoops" ); // Throws: AssertionError: Got unwanted exception (TypeError). Whoopsassert.equal(actual, expected[, message])
v0.1.21版本加入
用等价运算符(==)比较actual和expected的浅等于。
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也就是比较结果为假,那么错误信息输出actual和expected的值,用传入的运算符隔开;如果结果为真,错误信息输出传入的message。
const assert = require("assert"); assert.fail(1, 2, undefined, ">"); // AssertionError: 1 > 2 assert.fail(1, 2, "whoops", ">"); // AssertionError: whoopsassert.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 Errorassert.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 equal assert.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); // OK assert.notEqual(1, 1); // AssertionError: 1 != 1 assert.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); // OK assert.notStrictEqual(1, 1); // AssertionError: 1 != 1 assert.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 === 2 assert.strictEqual(1, 1); // OK assert.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");全文目录
请查看:全文目录
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/86557.html
摘要:关于本文档本文档的目的,是全面地解释的,即可作为参考文档,同时也包含了概念的讲解。但有的全新的实验性的,或者存在危险性的部分则会被重新设计。稳定级别锁定只会有安全性能或相关的修复。不接受对此做修改的建议。 关于本文档 本文档的目的,是全面地解释Node.js的API,即可作为参考文档,同时也包含了概念的讲解。每个章节都描述了一个内置模块或一个高阶概念(high-level concep...
摘要:毕竟官方文档才是未经提炼的纯技术点,读书不能只读二手书。目前网上能找到的中文文档基本都是基于的,但截至此文发布,最新的稳定版都已经是了。翻译过程中主要参考官方英文文档,以及极客学院的官方文档中文翻译。 前言 相信很多开发者和我一样,在学习一门技术的时候,通过网上的各种教程和视频入门之后会发现自己遇到一个上升瓶颈。造成这个瓶颈的很大一部分原因,我认为是进阶教程的知识点过于分散,同时高质量...
摘要:用法具体的参数及脚本运行方式,请参考命令行工具章节。示例用写的一个返回的服务器示例要运行此服务器,将上面所示代码放入文件,并用执行它本文档中所有的示例均可以类似方式运行。全文目录请查看全文目录 用法 node [options] [v8 options] [script.js | -e script] [arguments] 具体的option参数及脚本运行方式,请参考命令行工具章节。...
摘要:单元测试,测试一个简单的组件。接口测试,用户信息接口测试。学习借鉴,一些使用做测试的开源项目。这里使用到的内置断言断言结果值等于我们想要的预期值,则测试通过。在里放入一个函数,函数自动执行,里面执行的结果必须抛出错误,则测试通过。 目录 1、为什么选择 AVA ?2、API 概览。3、准备工作。4、单元测试,测试一个简单的工具函数。5、使用 Promise、Async/await、Ob...
摘要:单元测试上一节有讨论过,单元测试就是以代码单元为单位进行测试,代码单元可以是一个函数,一个模块,或者一个类。单元测试是最容易理解也最容易实现的测试方式。在写单元测试的时候,尽量将你的单元测试独立出来,不要几个单元互相引用。 showImg(https://segmentfault.com/img/remote/1460000008823416?w=997&h=350); 本文作者:G...
阅读 1243·2021-11-22 09:34
阅读 2060·2021-10-08 10:18
阅读 1672·2021-09-29 09:35
阅读 2373·2019-08-29 17:20
阅读 2053·2019-08-29 15:36
阅读 3332·2019-08-29 13:52
阅读 719·2019-08-29 12:29
阅读 1122·2019-08-28 18:10