Node.js學(xué)習(xí)之?dāng)嘌詀ssert的使用
一、斷言概述斷言是編程術(shù)語(yǔ),表示為一些布爾表達(dá)式,程序員相信在程序中的某個(gè)特定點(diǎn)該表達(dá)式值為真。斷言可以在測(cè)試時(shí)啟用,以驗(yàn)證代碼的正確性,并在部署時(shí)禁用,使得代碼更加穩(wěn)定和不易出錯(cuò)。同時(shí),斷言還可以在
一、斷言概述
斷言是編程術(shù)語(yǔ),表示為一些布爾表達(dá)式,程序員相信在程序中的某個(gè)特定點(diǎn)該表達(dá)式值為真。斷言可以在測(cè)試時(shí)啟用,以驗(yàn)證代碼的正確性,并在部署時(shí)禁用,使得代碼更加穩(wěn)定和不易出錯(cuò)。同時(shí),斷言還可以在最終用戶(hù)遇到問(wèn)題時(shí)重新啟用,方便問(wèn)題排查。在Node.js中,有十多個(gè)斷言測(cè)試的函數(shù),可以用于測(cè)試不變式。
二、判斷值是否為真
判斷值是否為真有以下兩個(gè)斷言測(cè)試函數(shù):
2.1 assert(value[, message])
這個(gè)測(cè)試函數(shù)在value為true時(shí)通過(guò)斷言測(cè)試,否則拋出AssertionError。如果沒(méi)有指定message參數(shù),會(huì)使用默認(rèn)的錯(cuò)誤信息。
2.2 assert.ok(value[, message])
assert.ok()與assert()的作用是一樣的,都是測(cè)試value是否為真值。用法也一樣,所以可以將assert()視為assert.ok()的語(yǔ)法糖。
三、判斷預(yù)期值和實(shí)際值相等()
這一組里面有兩個(gè)測(cè)試函數(shù),用于測(cè)試預(yù)期值與實(shí)際值是否相等,如果相等則斷言通過(guò),否則拋出AssertionError。
3.1 assert.equal(actual, expected[, message])
assert.equal()用于測(cè)試期望值和實(shí)際值是否相等。對(duì)于值類(lèi)型的比較,比較的是兩個(gè)值是否相等;對(duì)于引用類(lèi)型的比較,比較的是值的引用。
3.2 (actual, expected[, message])
()同樣也是測(cè)試預(yù)期值和實(shí)際值是否相等,使用的仍然是()。但是與equal()不同的是,deepEqual()在對(duì)引用類(lèi)型進(jìn)行比較的時(shí)候,比較的是對(duì)象的屬性值。
四、判斷預(yù)期值和實(shí)際值全等()
這組測(cè)試函數(shù)是用于判斷預(yù)期值和實(shí)際值是否深度相等的,內(nèi)部使用的是(),所以對(duì)象的原型也會(huì)進(jìn)行比較,值得類(lèi)型也是比較的范圍。
4.1 (actual, expected[, message])
由于內(nèi)部使用的是全等(),所以對(duì)象的原型也會(huì)計(jì)入比較的范圍。
4.2 (actual, expected[, message])
strictEqual()是equal()的加強(qiáng)版,考慮了數(shù)據(jù)類(lèi)型。如果actual expected,則斷言通過(guò),否則拋出AssertionError。
五、判斷預(yù)期值和實(shí)際值不相等(!)
這兒總結(jié)一下判斷預(yù)期值和實(shí)際值不相等的兩個(gè)測(cè)試函數(shù),實(shí)際上就是上面(三)的逆運(yùn)算。
5.1 (actual, expected[, message])
notEqual()為equal()的逆運(yùn)算,如果actual ! expected則斷言通過(guò)。
5.2 (actual, expected[, message])
notDeepEqual()為deepEqual()的逆運(yùn)算,如果actual ! expected則斷言通過(guò)。
六、判斷預(yù)期值和實(shí)際值嚴(yán)格不相等(!)
這兒總結(jié)一下判斷預(yù)期值和實(shí)際值嚴(yán)格不相等的兩個(gè)測(cè)試函數(shù),實(shí)際上就是上面(四)的逆運(yùn)算。
6.1 (actual, expected[, message])
如果actual ! expected則斷言通過(guò)。
6.2 (actual, expected[, message])
notDeepStrictEqual()就是deepStrictEqual()的逆運(yùn)算,如果actual ! expected則斷言通過(guò)。
七、斷言錯(cuò)誤并拋出
這一組有四個(gè)測(cè)試函數(shù),是對(duì)錯(cuò)誤進(jìn)行的處理。
7.1 (message)
這個(gè)測(cè)試函數(shù)可以用于主動(dòng)拋出帶有message屬性的AssertionError對(duì)象。
7.2 (actual, expected[, message[, operator[, stackStartFunction]]])
該測(cè)試函數(shù)用于主動(dòng)拋出自定義錯(cuò)誤信息,拋出錯(cuò)誤信息格式為:actual 參數(shù) operator 參數(shù) expected 參數(shù)。
7.3 (block, error, message)
如果block拋出的錯(cuò)誤滿(mǎn)足error參數(shù),則斷言通過(guò),否則拋出block中的錯(cuò)誤。error參數(shù)可以