最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Node.js API詳解之 assert模塊用法實(shí)例分析

 更新時(shí)間:2020年05月26日 08:43:10   作者:李小強(qiáng)  
這篇文章主要介紹了Node.js API詳解之 assert模塊用法,結(jié)合實(shí)例形式分析了Node.js API中assert模塊基本函數(shù)、功能、用法及操作注意事項(xiàng),需要的朋友可以參考下

本文實(shí)例講述了Node.js API詳解之 assert模塊用法。分享給大家供大家參考,具體如下:

Node.js API詳解之 assert

assert 模塊提供了斷言測(cè)試的函數(shù),用于測(cè)試不變式。
斷言是編程術(shù)語(yǔ),表示為一些布爾表達(dá)式,程序員相信在程序中的某個(gè)特定點(diǎn)該表達(dá)式值為真,
可以在任何時(shí)候啟用和禁用斷言驗(yàn)證,因此可以在測(cè)試時(shí)啟用斷言而在部署時(shí)禁用斷言。
同樣,程序投入運(yùn)行后,最終用戶在遇到問(wèn)題時(shí)可以重新啟用斷言。
使用斷言可以創(chuàng)建更穩(wěn)定、品質(zhì)更好且不易于出錯(cuò)的代碼。
當(dāng)需要在一個(gè)值為false時(shí)中斷當(dāng)前操作的話,可以使用斷言。
單元測(cè)試必須使用斷言(Junit/JunitX)。

使用方式:

const assert = require('assert');

assert.ok(value[, message])

說(shuō)明:

測(cè)試 value 是否為真值。 相當(dāng)于 assert.equal(!!value, true, message)。
如果 value 不為真值,則拋出一個(gè)帶有 message 屬性的 AssertionError,
其中 message 屬性的值等于傳入的 message 參數(shù)的值。
如果 message 參數(shù)為 undefined,則賦予默認(rèn)的錯(cuò)誤信息。

demo:

const assert = require('assert');
assert.ok(true);
// 測(cè)試通過(guò)。
assert.ok(1);
// 測(cè)試通過(guò)。
assert.ok(false);
// 拋出 "AssertionError: false == true"
assert.ok(0);
// 拋出 "AssertionError: 0 == true"
assert.ok(false, '不是真值');
// 拋出 "AssertionError: 不是真值"

assert(value[, message])

說(shuō)明:

assert.ok() 的別名。
用法與 assert.ok() 相同。

demo:

const assert = require('assert');
assert(true);
// 測(cè)試通過(guò)。
assert(1);
// 測(cè)試通過(guò)。
assert(false);
// 拋出 "AssertionError: false == true"
assert(0);
// 拋出 "AssertionError: 0 == true"
assert(false, '不是真值');
// 拋出 "AssertionError: 不是真值"

assert.ifError(value)

說(shuō)明:

如果 value 為真,則拋出 value。 可用于測(cè)試回調(diào)函數(shù)的 error 參數(shù)。
源碼:function ifError(err) { if (err) throw err; };

demo:

const assert = require('assert');
assert.ifError(0);
// 通過(guò)。
assert.ifError(1);
// 拋出 1。
assert.ifError('error');
// 拋出 'error'。
assert.ifError(new Error());
// 拋出 Error。

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

說(shuō)明:

使用相等運(yùn)算符(==)測(cè)試 actual 參數(shù)與 expected 參數(shù)是否相等

demo:

const assert = require('assert');
assert.equal(1, 1);
// 測(cè)試通過(guò),1 == 1。
assert.equal(1, '1');
// 測(cè)試通過(guò),1 == '1'。
assert.equal(1, 2);
// 拋出 AssertionError: 1 == 2
assert.equal({ a: { b: 1 } }, { a: { b: 1 } });
// 拋出 AssertionError: { a: { b: 1 } } == { a: { b: 1 } }

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

說(shuō)明:

測(cè)試 actual 參數(shù)與 expected 參數(shù)是否深度相等。 原始值使用相等運(yùn)算符(==)比較。
只測(cè)試可枚舉的自身屬性,不測(cè)試對(duì)象的原型、連接符、或不可枚舉的屬性(這些情況使用 assert.deepStrictEqual())。
Map 和 Set 包含的子項(xiàng)也會(huì)被測(cè)試。
如果兩個(gè)值不相等,則拋出一個(gè)帶有 message 屬性的 AssertionError,
其中 message 屬性的值等于傳入的 message 參數(shù)的值。
如果 message 參數(shù)為 undefined,則賦予默認(rèn)的錯(cuò)誤信息。

demo:

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(/a/gi, new Date());
//測(cè)試通過(guò),因?yàn)?RegExp 對(duì)象的屬性不是可枚舉的:
assert.deepEqual(obj1, obj1);
// 測(cè)試通過(guò),對(duì)象與自身相等。
assert.deepEqual(obj1, obj2);
// 拋出 AssertionError: { a: { b: 1 } } deepEqual { a: { b: 2 } }
// 因?yàn)?b 屬性的值不同。
assert.deepEqual(obj1, obj3);
// 測(cè)試通過(guò),兩個(gè)對(duì)象相等。
assert.deepEqual(obj1, obj4);
// 拋出 AssertionError: { a: { b: 1 } } deepEqual {}
// 因?yàn)椴粶y(cè)試原型。

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

說(shuō)明:

與 assert.deepEqual() 大致相同,但有一些區(qū)別:
1.原始值使用全等運(yùn)算符(===)比較。Set 的值與 Map 的鍵使用 SameValueZero 比較。
2.對(duì)象的原型也使用全等運(yùn)算符比較。
3.對(duì)象的類型標(biāo)簽要求相同。
4.比較[對(duì)象包裝器][]時(shí),其對(duì)象和里面的值要求相同。

demo:

const assert = require('assert');
assert.deepEqual({ a: 1 }, { a: '1' });
// 測(cè)試通過(guò),因?yàn)?1 == '1'。
assert.deepStrictEqual({ a: 1 }, { a: '1' });
// 拋出 AssertionError: { a: 1 } deepStrictEqual { a: '1' }
// 因?yàn)槭褂萌冗\(yùn)算符 1 !== '1'。
// 以下對(duì)象都沒(méi)有自身屬性。
const date = new Date();
const object = {};
const fakeDate = {};
Object.setPrototypeOf(fakeDate, Date.prototype);
assert.deepEqual(object, fakeDate);
// 測(cè)試通過(guò),不測(cè)試原型。
assert.deepStrictEqual(object, fakeDate);
// 拋出 AssertionError: {} deepStrictEqual Date {}
// 因?yàn)樵筒煌?
assert.deepEqual(date, fakeDate);
// 測(cè)試通過(guò),不測(cè)試類型標(biāo)簽。
assert.deepStrictEqual(date, fakeDate);
// 拋出 AssertionError: 2017-03-11T14:25:31.849Z deepStrictEqual Date {}
// 因?yàn)轭愋蜆?biāo)簽不同。
assert.deepStrictEqual(new Number(1), new Number(2));
// 測(cè)試不通過(guò),因?yàn)閿?shù)值對(duì)象包裝器里面的數(shù)值也會(huì)被比較。
assert.deepStrictEqual(new String('foo'), Object('foo'));
// 測(cè)試通過(guò),因?yàn)檫@兩個(gè)對(duì)象和里面的字符串都是相同的

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

說(shuō)明:

使用全等運(yùn)算符(===)測(cè)試 actual 參數(shù)與 expected 參數(shù)是否全等。

demo:

onst assert = require('assert');
assert.strictEqual(1, 2);
// 拋出 AssertionError: 1 === 2
assert.strictEqual(1, 1);
// 測(cè)試通過(guò)。
assert.strictEqual(1, '1');
// 拋出 AssertionError: 1 === '1'

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

說(shuō)明:

使用不等運(yùn)算符(!=)測(cè)試 actual 參數(shù)與 expected 參數(shù)是否不相等。

demo:

const assert = require('assert');
assert.notEqual(1, 2);
// 測(cè)試通過(guò)。
assert.notEqual(1, 1);
// 拋出 AssertionError: 1 != 1
assert.notEqual(1, '1');
// 拋出 AssertionError: 1 != '1'

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

說(shuō)明:

測(cè)試 actual 參數(shù)與 expected 參數(shù)是否不深度相等。 與 assert.deepEqual() 相反。

demo:

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);
// 測(cè)試通過(guò),obj1 與 obj2 不深度相等。
assert.notDeepEqual(obj1, obj3);
// 拋出 AssertionError: { a: { b: 1 } } notDeepEqual { a: { b: 1 } }
assert.notDeepEqual(obj1, obj4);
// 測(cè)試通過(guò),obj1 與 obj4 不深度相等。

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

說(shuō)明:

測(cè)試 actual 參數(shù)與 expected 參數(shù)是否不深度全等。 與 assert.deepStrictEqual() 相反。

demo:

const assert = require('assert');
assert.notDeepEqual({ a: 1 }, { a: '1' });
// 拋出 AssertionError: { a: 1 } notDeepEqual { a: '1' }
assert.notDeepStrictEqual({ a: 1 }, { a: '1' });
// 測(cè)試通過(guò)。

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

說(shuō)明:

使用不全等運(yùn)算符(!==)測(cè)試 actual 參數(shù)與 expected 參數(shù)是否不全等。

demo:

const assert = require('assert');
assert.notStrictEqual(1, 2);
// 測(cè)試通過(guò)。
assert.notStrictEqual(1, 1);
// 拋出 AssertionError: 1 !== 1
assert.notStrictEqual(1, '1');
// 測(cè)試通過(guò)。
assert.fail(message)

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

說(shuō)明:

拋出 AssertionError。 如果 message 參數(shù)為空,則錯(cuò)誤信息為 actual 參數(shù) + operator 參數(shù) + expected 參數(shù)。
如果只提供了 actual 參數(shù)與 expected 參數(shù),則 operator 參數(shù)默認(rèn)為 ‘!='。
如果提供了 message 參數(shù),則它會(huì)作為錯(cuò)誤信息,其他參數(shù)會(huì)保存在錯(cuò)誤對(duì)象的屬性中。
如果提供了 stackStartFunction 參數(shù),則該函數(shù)上的棧幀都會(huì)從棧信息中移除

demo:

const assert = require('assert');
assert.fail(1, 2, undefined, '>');
// 拋出 AssertionError [ERR_ASSERTION]: 1 > 2
assert.fail(1, 2, '錯(cuò)誤信息');
// 拋出 AssertionError [ERR_ASSERTION]: 錯(cuò)誤信息
assert.fail(1, 2, '錯(cuò)誤信息', '>');
// 拋出 AssertionError [ERR_ASSERTION]: 錯(cuò)誤信息
// 上面兩個(gè)例子的 `actual` 參數(shù)、`expected` 參數(shù)與 `operator` 參數(shù)不影響錯(cuò)誤消息。
assert.fail();
// 拋出 AssertionError [ERR_ASSERTION]: Failed
assert.fail('錯(cuò)誤信息');
// 拋出 AssertionError [ERR_ASSERTION]: 錯(cuò)誤信息
assert.fail('a', 'b');
// 拋出 AssertionError [ERR_ASSERTION]: 'a' != 'b'
//使用 stackStartFunction 參數(shù)攔截異常的棧信息:
function suppressFrame() {
 assert.fail('a', 'b', undefined, '!==', suppressFrame);
}
suppressFrame();
// AssertionError [ERR_ASSERTION]: 'a' !== 'b'
//   at repl:1:1
//   at ContextifyScript.Script.runInThisContext (vm.js:44:33)
//   ...

assert.throws(block[, error][, message])

說(shuō)明:

斷言 block 函數(shù)會(huì)拋出錯(cuò)誤。
error 參數(shù)可以是構(gòu)造函數(shù)、正則表達(dá)式、或自定義函數(shù)。
如果指定了 message 參數(shù),則當(dāng) block 函數(shù)不拋出錯(cuò)誤時(shí),message 參數(shù)會(huì)作為 AssertionError 的錯(cuò)誤信息。

demo:

const assert = require('assert');
assert.throws(
 () => {
  throw new Error('錯(cuò)誤信息');
 },
 /123/
);
// Error: 錯(cuò)誤信息
assert.throws(
 () => {
  throw new Error('錯(cuò)誤信息');
 },
 /錯(cuò)誤/
);
// 通過(guò)
assert.throws(
 () => {
  throw new Error('錯(cuò)誤信息');
 },
 Error
);
// 通過(guò)
assert.throws(
 () => {
  throw new Error('錯(cuò)誤信息');
 },
 function(err) {
  if ((err instanceof Error) && /錯(cuò)誤/.test(err)) {
   return true;
  }
 },
 '不是期望的錯(cuò)誤'
);
// 通過(guò)
// error 參數(shù)不能是字符串。 如果第二個(gè)參數(shù)是字符串,則視為省略 error 參數(shù),傳入的字符串會(huì)被用于 message 參數(shù)。
// 這是錯(cuò)誤的!不要這么做!
assert.throws(() => {
  throw new Error('錯(cuò)誤信息');
 }, '錯(cuò)誤信息', '沒(méi)有拋出期望的信息');
 
// 應(yīng)該這么做。
assert.throws(() => {
  throw new Error('錯(cuò)誤信息');
 }, /錯(cuò)誤信息/, '沒(méi)有拋出期望的信息');

assert.doesNotThrow(block[, error][, message])

說(shuō)明:

斷言 block 函數(shù)不會(huì)拋出錯(cuò)誤。
當(dāng) assert.doesNotThrow() 被調(diào)用時(shí),它會(huì)立即調(diào)用 block 函數(shù)。
如果拋出錯(cuò)誤且錯(cuò)誤類型與 error 參數(shù)指定的相同,則拋出 AssertionError。
如果錯(cuò)誤類型不相同,或 error 參數(shù)為 undefined,則拋出錯(cuò)誤。

demo:

const assert = require('assert');
assert.doesNotThrow(
 () => {
  throw new TypeError('錯(cuò)誤信息');
 },
 SyntaxError
);
// TypeError: 錯(cuò)誤信息
assert.doesNotThrow(
 () => {
  throw new TypeError('錯(cuò)誤信息');
 },
 TypeError
);
// AssertionError [ERR_ASSERTION]: Got unwanted exception.
// 錯(cuò)誤信息
// 如果拋出了 AssertionError 且有給 message 參數(shù)傳值,則 message 參數(shù)的值會(huì)被附加到 AssertionError 的信息中:
assert.doesNotThrow(
 () => {
  throw new TypeError('錯(cuò)誤信息');
 },
 TypeError,
 '拋出錯(cuò)誤'
);
// AssertionError [ERR_ASSERTION]: Got unwanted exception: 拋出錯(cuò)誤
// 錯(cuò)誤信息

注意事項(xiàng)

說(shuō)明:

對(duì)于 SameValueZero 比較,建議使用 ES2015 的 Object.is()。

demo:

const a = 0;
const b = -a;
assert.notStrictEqual(a, b);
// 拋出 AssertionError: 0 !== -0
// 因?yàn)槿冗\(yùn)算符不區(qū)分 -0 與 +0。
assert(!Object.is(a, b));
// 但 Object.is() 可以區(qū)分。
const str1 = 'foo';
const str2 = 'foo';
assert.strictEqual(str1 / 1, str2 / 1);
// 拋出 AssertionError: NaN === NaN
// 因?yàn)槿冗\(yùn)算符不能用于測(cè)試 NaN。
assert(Object.is(str1 / 1, str2 / 1));
// 但 Object.is() 可以測(cè)試。

SameValueZero

說(shuō)明:

內(nèi)部比較操作SameValueZero(x,y)
如果 type of x 不同于 type of y,返回false。
如果 type of x 是數(shù)字,那么
如果 x 為 NaN, y 為 NaN,返回 true。
如果 x 是 +0 而 y 是 -0,返回 true。
如果 x 是 -0 而 y 是 +0,返回 true。
如果 x 與 y 相同,則返回 true。
返回 假。

希望本文所述對(duì)大家node.js程序設(shè)計(jì)有所幫助。

相關(guān)文章

  • 關(guān)于commander.js使用及源碼分析

    關(guān)于commander.js使用及源碼分析

    這篇文章主要介紹了關(guān)于commander.js使用及源碼分析,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-06-06
  • Node.js + express基本用法教程

    Node.js + express基本用法教程

    這篇文章主要介紹了Node.js + express基本用法,結(jié)合實(shí)例形式分析了nodejs導(dǎo)入express、路由訪問(wèn)、數(shù)據(jù)處理等相關(guān)操作技巧,需要的朋友可以參考下
    2019-03-03
  • 如何配置nodejs的環(huán)境變量

    如何配置nodejs的環(huán)境變量

    這篇文章主要介紹了如何配置nodejs的環(huán)境變量問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-09-09
  • nodejs實(shí)現(xiàn)的一個(gè)簡(jiǎn)單聊天室功能分享

    nodejs實(shí)現(xiàn)的一個(gè)簡(jiǎn)單聊天室功能分享

    這篇文章主要介紹了nodejs實(shí)現(xiàn)的一個(gè)簡(jiǎn)單聊天室功能分享,本文使用了express和socket.io兩個(gè)庫(kù)結(jié)合實(shí)現(xiàn),需要的朋友可以參考下
    2014-12-12
  • 從零學(xué)習(xí)node.js之詳解異步控制工具async(八)

    從零學(xué)習(xí)node.js之詳解異步控制工具async(八)

    sync是一個(gè)流程控制工具包,提供了直接而強(qiáng)大的異步功能。基于JavaScript為Node.js設(shè)計(jì),同時(shí)也可以直接在瀏覽器中使用。下面這篇文章主要介紹了node.js之異步控制工具async的相關(guān)資料,需要的朋友可以參考下。
    2017-02-02
  • 詳解nodejs express下使用redis管理session

    詳解nodejs express下使用redis管理session

    本篇文章主要介紹了詳解nodejs express下使用redis管理session ,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下。
    2017-04-04
  • nodejs使用async模塊同步執(zhí)行的方法

    nodejs使用async模塊同步執(zhí)行的方法

    今天小編就為大家分享一篇關(guān)于nodejs使用async模塊同步執(zhí)行的方法,小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧
    2019-03-03
  • Nodejs Express 通過(guò)log4js寫日志到Logstash(ELK)

    Nodejs Express 通過(guò)log4js寫日志到Logstash(ELK)

    這篇文章主要介紹了Nodejs Express 通過(guò)log4js寫日志到Logstash(ELK),小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2018-08-08
  • 提高NodeJS中SSL服務(wù)的性能

    提高NodeJS中SSL服務(wù)的性能

    盡管OpenSSL露出驚天漏洞,但是基于SSL的加密協(xié)議還是應(yīng)用得最廣泛的,這只是OpenSSL這個(gè)開(kāi)源軟件本身的問(wèn)題(詳情: OpenSSL是坑貨寫的),下面這篇文章提供了一些如何在NodeJS中,提高HTTPS性能方面的技巧
    2014-07-07
  • 基于Koa(nodejs框架)對(duì)json文件進(jìn)行增刪改查的示例代碼

    基于Koa(nodejs框架)對(duì)json文件進(jìn)行增刪改查的示例代碼

    這篇文章主要介紹了基于Koa(nodejs框架)對(duì)json文件進(jìn)行增刪改查的示例代碼,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-02-02

最新評(píng)論

长乐市| 公安县| 中阳县| 成都市| 酉阳| 浙江省| 平武县| 宝应县| 大厂| 茶陵县| 凌云县| 白山市| 都江堰市| 沈阳市| 昭觉县| 教育| 广饶县| 长顺县| 江达县| 麻栗坡县| 浦江县| 达拉特旗| 浏阳市| 佛坪县| 芦溪县| 蓝山县| 天等县| 肥乡县| 岗巴县| 吉隆县| 加查县| 瑞金市| 于都县| 洛隆县| 邳州市| 沁水县| 郯城县| 和龙市| 辛集市| 延吉市| 上高县|