国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發 > JS > 正文

學習node.js 斷言的使用詳解

2024-05-06 16:49:11
字體:
來源:轉載
供稿:網友

assert模塊提供了一組簡單的斷言測試,分嚴格模式(strict)和遺留模式(legacy),嚴格模式下,對比的方式比較嚴格,比如說,0與'0'比較,會報錯,但在遺留模式下是可以通過的。官方推薦使用嚴格模式, 所以本文基于strict模式下學習。

如何使用嚴格模式

const assert = require('assert').strict; // 嚴格模式assert.equal(0, '0') // error

全局使用strict模式后,assert.equal() 與assert.strictEqual()的效果是一樣的。

如果不想全局使用的話,可以直接使用帶strict的方法。

const assert = require('assert') // 遺留模式assert.equal(0, '0') // successassert.strictEqual(0, '0') // error

assert.AssertionError

Error的子類,表示斷言失敗,assert模塊拋出的錯誤都是AssertionError的實例。

類似于下面這個class,實際上的AssertionError是由ES5寫的,下面這個只是方便理解傳入的參數

interface IOptions { message?: string; // 設置錯誤的信息 actual?: any; // 設置錯誤實例上的實際值 expected?: any; // 設置錯誤實例上的期望值 operator?: string; // 設置用于比較的操作或觸發錯誤的斷言函數 stackStartFn(): any; // 生成的堆棧跟蹤將移除所有幀直到提供的函數}class AssertionError extends Error { constructor(options: IOptions) {  // ... }}

assert(value: any, message?: string | Error)

檢測是否為真值,是assert.ok的別名。

assert.ok(value: any, message?: string | Error)

檢測value是否為真值。

如果不為真值,拋出屬性message為message參數值的AssertionError,如果未定義,為默認錯誤信息。

如果是Error的實例,則拋出Error實例。(以下關于message的使用都一樣)

assert.strictEqual(actual: any, expected: any, message?: string | Error)

檢測 actual參數和expected參數之間的嚴格相等性,使用sameValue比較。

assert.deepStrictEqual(actual: any, expected: any, message?: string | Error)

檢測actual參數和expected參數之間的深度嚴格相等性,深度比較意味著子對象的可枚舉的自身屬性也通過以下規則進行遞歸計算。

assert.notStrictEqual(actual: any, expected: any, message?: string | Error)

檢測 actual參數和expected參數之間的嚴格不相等性,使用sameValue比較。

assert.notDeepStrictEqual(actual: any, expected: any, message?: string | Error)

檢測actual參數和expected參數之間的深度嚴格不相等性,深度比較意味著子對象的可枚舉的自身屬性也通過以下規則進行遞歸計算。

assert.fail(message?: string | Error = 'failed')

使用提供的錯誤消息或默認錯誤消息拋出 AssertionError。

assert.throws(fn: function, error?: regExp | function | object | Error, message?: string)

檢測fn函數拋出的錯誤是否與預期的錯誤error一樣。

fn為一個會拋出錯誤的函數

error可以為多種類型,作為與拋出的錯誤對比的樣本。

為regExp時,可以匹配拋出的錯誤。

assert.throws(() => { throw new Error('it is a error')}, /^Error: it is a error$/);

為function時,可以自定義驗證函數

assert.throws(() => { throw new Error('it is a error')}, (err) => { if ((err instanceof Error) && /error/.test(err)) {  return true; }});

為object時,將僅測試驗證對象error上的屬性。

const err = new TypeError('錯誤值');err.code = 404;err.foo = 'bar';err.info = { nested: true, baz: 'text'};err.reg = /abc/i; // 正則表達式只有當驗證對象包含相同的正則表達式時才通過。assert.throws(() => { throw err;}, { name: 'TypeError', message: '錯誤值' info: {  nested: true,  baz: 'text'  // 使用嵌套對象需要存在所有屬性。  // 否則驗證將失敗。  // 無法對嵌套屬性使用正則表達式! }});

為Error時,用instanceof檢測是否是該實例。

注意, error 不能是字符串。 如果提供了一個字符串作為第二個參數,則假定 error 被忽略,而字符串將用于 message。

assert.reject(asyncFn: function | promise, error?: regExp | function | object | Error, message?: string)

assert.throws的異步版本。

asyncFn為一個function時

立即執行該函數,如果該函數不返回promise,則返回一個被拒絕(reject)的 Promise。
如果該函數同步拋出一個錯誤,返回一個帶有該錯誤的被拒絕的 Promise。

asyncFn為一個Promise時

等待Promise執行,檢測是否被拒絕。

assert.ifError(value: any)

如果value不為null或者undefined就將value作為錯誤拋出。

在回調中測試error參數時,這很有用。

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持VeVb武林網。


注:相關教程知識閱讀請移步到JavaScript/Ajax教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 汝州市| 和田市| 凤山县| 息烽县| 右玉县| 泽州县| 澄城县| 汨罗市| 遵化市| 唐山市| 房山区| 上林县| 于田县| 巧家县| 比如县| 宜兰市| 柏乡县| 府谷县| 河北省| 北宁市| 平凉市| 弥渡县| 湘潭市| 长宁区| 阿勒泰市| 贞丰县| 鹤岗市| 唐海县| 扎鲁特旗| 三原县| 车致| 岳阳市| 阳信县| 临沧市| 城市| 丹棱县| 侯马市| 玉林市| 马公市| 双峰县| 日土县|