欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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ì)象都沒有自身屬性。
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ò)誤信息', '沒有拋出期望的信息');
 
// 應(yīng)該這么做。
assert.throws(() => {
  throw new Error('錯(cuò)誤信息');
 }, /錯(cuò)誤信息/, '沒有拋出期望的信息');

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)文章

  • Node.js的模塊化機(jī)制和Buffer對(duì)象詳解

    Node.js的模塊化機(jī)制和Buffer對(duì)象詳解

    這篇文章主要為大家詳細(xì)介紹了Node.js的模塊化機(jī)制和Buffer對(duì)象,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來(lái)幫助
    2022-02-02
  • Express本地測(cè)試HTTPS的示例代碼

    Express本地測(cè)試HTTPS的示例代碼

    這篇文章主要介紹了Express本地測(cè)試HTTPS的示例代碼,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2018-06-06
  • Node.js 使用axios讀寫influxDB的方法示例

    Node.js 使用axios讀寫influxDB的方法示例

    這篇文章主要介紹了Node.js 使用axios讀寫influxDB的方法示例,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2018-10-10
  • node.js集成百度UE編輯器

    node.js集成百度UE編輯器

    這篇文章主要介紹了node.js集成百度UE編輯器的方法,需要的朋友可以參考下
    2015-02-02
  • 簡(jiǎn)單聊一聊Node.js參數(shù)max-old-space-size

    簡(jiǎn)單聊一聊Node.js參數(shù)max-old-space-size

    簡(jiǎn)單的說(shuō)Node.js就是運(yùn)行在服務(wù)端的JavaScript,下面這篇文章主要給大家介紹了關(guān)于Node.js參數(shù)max-old-space-size的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2023-01-01
  • node+experss實(shí)現(xiàn)爬取電影天堂爬蟲

    node+experss實(shí)現(xiàn)爬取電影天堂爬蟲

    本文給大家分享的是node+experss制作爬蟲的第二篇,我們來(lái)爬取電影天堂最新更新的電影迅雷下載鏈接,有需要的小伙伴可以參考下
    2016-11-11
  • npm?工具庫(kù)?yenv使用簡(jiǎn)介

    npm?工具庫(kù)?yenv使用簡(jiǎn)介

    這篇文章主要為大家介紹了npm?工具庫(kù)?yenv使用簡(jiǎn)介,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-05-05
  • sharp.js安裝過(guò)程中遇到的問(wèn)題總結(jié)

    sharp.js安裝過(guò)程中遇到的問(wèn)題總結(jié)

    本文給大家講述的是Node.js服務(wù)端圖片處理利器sharp.js安裝過(guò)程中遇到的問(wèn)題的匯總,非常不錯(cuò),有需要的小伙伴可以參考下
    2020-04-04
  • nvm使用use命令失效問(wèn)題解決方法

    nvm使用use命令失效問(wèn)題解決方法

    這篇文章主要給大家介紹了關(guān)于nvm使用use命令失效問(wèn)題的解決方法,nvm是一個(gè)類似于版本管理工具的軟件,它可以輕松地在同一臺(tái)計(jì)算機(jī)上管理多個(gè)不同的node.js版本,需要的朋友可以參考下
    2023-07-07
  • nodejs入門教程五:連接數(shù)據(jù)庫(kù)的方法分析

    nodejs入門教程五:連接數(shù)據(jù)庫(kù)的方法分析

    這篇文章主要介紹了nodejs入門教程之連接數(shù)據(jù)庫(kù)的方法,結(jié)合實(shí)例形式分析了nodejs連接數(shù)據(jù)庫(kù)的具體步驟與相關(guān)操作技巧,需要的朋友可以參考下
    2017-04-04

最新評(píng)論