assert模塊提供了一組簡單的斷言測試,分嚴格模式(strict)和遺留模式(legacy),嚴格模式下,對比的方式比較嚴格,好比說,0與'0'比較,會報錯,但在遺留模式下是能夠經過的。官方推薦使用嚴格模式, 因此本文基於strict模式下學習。git
const assert = require('assert').strict; // 嚴格模式 assert.equal(0, '0') // error
全局使用strict模式後,assert.equal()
與assert.strictEqual()
的效果是同樣的。
若是不想全局使用的話,能夠直接使用帶strict的方法。github
const assert = require('assert') // 遺留模式 assert.equal(0, '0') // success assert.strictEqual(0, '0') // error
Error
的子類,表示斷言失敗,assert模塊拋出的錯誤都是AssertionError
的實例。正則表達式
相似於下面這個class,實際上的AssertionError
是由ES5寫的,下面這個只是方便理解傳入的參數promise
interface IOptions { message?: string; // 設置錯誤的信息 actual?: any; // 設置錯誤實例上的實際值 expected?: any; // 設置錯誤實例上的指望值 operator?: string; // 設置用於比較的操做或觸發錯誤的斷言函數 stackStartFn(): any; // 生成的堆棧跟蹤將移除全部幀直到提供的函數 } class AssertionError extends Error { constructor(options: IOptions) { // ... } }
檢測是否爲真值,是assert.ok的別名。異步
檢測value是否爲真值。
若是不爲真值,拋出屬性message
爲message
參數值的AssertionError
,若是未定義,爲默認錯誤信息。
若是是Error的實例,則拋出Error實例。(如下關於message的使用都同樣)async
檢測 actual
參數和expected
參數之間的嚴格相等性,使用sameValue比較。函數
檢測actual
參數和expected
參數之間的深度嚴格相等性,深度比較意味着子對象的可枚舉的自身屬性也經過如下規則進行遞歸計算。學習
檢測 actual
參數和expected
參數之間的嚴格不相等性,使用sameValue比較。測試
檢測actual
參數和expected
參數之間的深度嚴格不相等性,深度比較意味着子對象的可枚舉的自身屬性也經過如下規則進行遞歸計算。ui
使用提供的錯誤消息或默認錯誤消息拋出 AssertionError。
檢測fn函數拋出的錯誤是否與預期的錯誤error同樣。
fn爲一個會拋出錯誤的函數
error能夠爲多種類型,做爲與拋出的錯誤對比的樣本。
assert.throws(() => { throw new Error('it is a error') }, /^Error: it is a error$/);
assert.throws(() => { throw new Error('it is a error') }, (err) => { if ((err instanceof Error) && /error/.test(err)) { return true; } });
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 不能是字符串。 若是提供了一個字符串做爲第二個參數,則假定 error 被忽略,而字符串將用於 message。
assert.throws
的異步版本。
當即執行該函數,若是該函數不返回promise,則返回一個被拒絕(reject)的 Promise。
若是該函數同步拋出一個錯誤,返回一個帶有該錯誤的被拒絕的 Promise。
等待Promise執行,檢測是否被拒絕。
若是value
不爲null
或者undefined
就將value
做爲錯誤拋出。
在回調中測試error
參數時,這頗有用。