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