nodejs -- assert

在程序設(shè)計(jì)中,斷言(assertion)是一種放在程序中的一階邏輯(如一個(gè)結(jié)果為真或是假的邏輯判斷式)着降,目的是為了標(biāo)示與驗(yàn)證程序開(kāi)發(fā)者預(yù)期的結(jié)果-當(dāng)程序運(yùn)行到斷言的位置時(shí),對(duì)應(yīng)的斷言應(yīng)該為真。若斷言不為真時(shí)病游,程序會(huì)中止運(yùn)行衷戈,并給出錯(cuò)誤消息狭吼。 -- 維基百科

斷言是單元測(cè)試中用來(lái)保證最小單元是否正常的檢測(cè)方法。如在demo.js中輸出一個(gè)錯(cuò)誤的兩數(shù)求和函數(shù)add:

//demo.js

module.exports = function(a,b){
    //此處寫(xiě)成兩數(shù)相減
    return a - b;
}

然后創(chuàng)建一個(gè)test.js殖妇,使用nodejs提供的assert模塊進(jìn)行檢測(cè):

//test.js
'use strict'
const assert = require('assert');
const add = require('./demo');

assert.strictEqual(add(1,2),3);

顯然由于函數(shù)自身錯(cuò)誤刁笙,得到的值無(wú)法滿(mǎn)足期望,此時(shí)程序?qū)?huì)拋出一個(gè)AssertionError異常(assert 模塊拋出的所有錯(cuò)誤都是 AssertionError 類(lèi)的實(shí)例)谦趣,停止運(yùn)行:

在nodejs的API中定義了幾種檢測(cè)方法:

assert.ok() : 判斷結(jié)果是否為真疲吸。

assert.ok(false,'此為假');
//等同于
assert.equal(!!(add(1,2) === 3),true,'此為假');

assert.ifError() : 判斷實(shí)際值是否為一個(gè)假值(null,undefined,0,'',false),如實(shí)際值為真值前鹅,則拋出異常摘悴。

assert.ifError('');

assert.ifError(' ');  //Error: " "

assert.equal() : 判斷實(shí)際值與期望值是否相等。
assert.notEqual() : 判斷實(shí)際值與期望值是否相等舰绘。

assert.equal(add(1,2),3);

assert.notEqual(add(1,2),3);

assert.deepStrictEqual() : 判斷實(shí)際值與期望值是否深度相等蹂喻。
assert.notDeepStrictEqual : 判斷實(shí)際值與期望值是否不深度相等

assert.deepStrictEqual({a:1},{a:'1'});

assert.notDeepStrictEqual({a:1},{a:'1'});

assert.strictEqual() : 判斷實(shí)際值與期望值是否嚴(yán)格相等(相當(dāng)于 ===)
assert.notStrictEqual() : 判斷實(shí)際值與期望值是否不嚴(yán)格相等(相當(dāng)于 葱椭!==)

assert.strictEqual(1,true);

assert.notStrictEqual(1,true); 

assert.throws() : 判斷代碼塊是否拋出異常。
assert.doesNotThrow() : 判斷代碼塊是否沒(méi)有拋出異常口四。

//assert.throws(fn[, error][, message])
assert.throws(
    () => {
        throw new Error('錯(cuò)誤值')
    },
    {
        message:'錯(cuò)誤',
    }
)
assert.throws(
    () => {
        throw new Error('錯(cuò)誤值')
    },
    {
        message:'錯(cuò)誤',
    },'拋出異常不符合期望'
)
//assert.doesNotThrow(fn[, error][, message])
assert.doesNotThrow(
    () => {
        throw new TypeError('錯(cuò)誤值');
    },
    /錯(cuò)誤值/,
    '出錯(cuò)啦'
);
assert.doesNotThrow(
    () => {
        throw new TypeError('錯(cuò)誤值');
    }
);

assert.throws(fn[, error][, message])

  • fn <Function>
  • error <RegExp> | <Function> | <Object> | <Error>
  • message <string>
    期望 fn 函數(shù)拋出異常孵运。error 則用于指定拋出期望的錯(cuò)誤。如果指定 message蔓彩,則當(dāng) fn 調(diào)用無(wú)法拋出或錯(cuò)誤驗(yàn)證失敗時(shí)治笨, message 將附加到 AssertionError 提供的消息。

assert.doesNotThrow(fn[, error][, message])

  • fn <Function>
  • error <RegExp> | <Function>
  • message <string>
    斷言 fn 函數(shù)不會(huì)拋出錯(cuò)誤赤嚼。若拋出錯(cuò)誤且與 error 參數(shù)指定的類(lèi)型相同旷赖,則拋出AssertionError。若不同或error參數(shù)未定義探膊,則錯(cuò)誤將傳播回調(diào)用方杠愧。

斷言用于檢查程序在運(yùn)行時(shí)是否滿(mǎn)足期望。一旦斷言檢查失敗逞壁,將會(huì)拋出異常停止整個(gè)應(yīng)用流济。當(dāng)需要進(jìn)行多處斷言檢查時(shí),就需要借助于測(cè)試框架(如:mocha)腌闯,將各測(cè)試統(tǒng)一起來(lái)執(zhí)行绳瘟,并記錄執(zhí)行時(shí)拋出的異常,最后輸出測(cè)試結(jié)果姿骏。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末糖声,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子分瘦,更是在濱河造成了極大的恐慌蘸泻,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,042評(píng)論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件嘲玫,死亡現(xiàn)場(chǎng)離奇詭異悦施,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)去团,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,996評(píng)論 2 384
  • 文/潘曉璐 我一進(jìn)店門(mén)抡诞,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人土陪,你說(shuō)我怎么就攤上這事昼汗。” “怎么了鬼雀?”我有些...
    開(kāi)封第一講書(shū)人閱讀 156,674評(píng)論 0 345
  • 文/不壞的土叔 我叫張陵顷窒,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我源哩,道長(zhǎng)蹋肮,這世上最難降的妖魔是什么出刷? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,340評(píng)論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮坯辩,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘崩侠。我一直安慰自己漆魔,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,404評(píng)論 5 384
  • 文/花漫 我一把揭開(kāi)白布却音。 她就那樣靜靜地躺著改抡,像睡著了一般。 火紅的嫁衣襯著肌膚如雪系瓢。 梳的紋絲不亂的頭發(fā)上阿纤,一...
    開(kāi)封第一講書(shū)人閱讀 49,749評(píng)論 1 289
  • 那天,我揣著相機(jī)與錄音夷陋,去河邊找鬼欠拾。 笑死,一個(gè)胖子當(dāng)著我的面吹牛骗绕,可吹牛的內(nèi)容都是我干的藐窄。 我是一名探鬼主播,決...
    沈念sama閱讀 38,902評(píng)論 3 405
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼酬土,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼荆忍!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起撤缴,我...
    開(kāi)封第一講書(shū)人閱讀 37,662評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤刹枉,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后屈呕,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體微宝,經(jīng)...
    沈念sama閱讀 44,110評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,451評(píng)論 2 325
  • 正文 我和宋清朗相戀三年凉袱,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了芥吟。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,577評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡专甩,死狀恐怖钟鸵,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情涤躲,我是刑警寧澤棺耍,帶...
    沈念sama閱讀 34,258評(píng)論 4 328
  • 正文 年R本政府宣布,位于F島的核電站种樱,受9級(jí)特大地震影響蒙袍,放射性物質(zhì)發(fā)生泄漏俊卤。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,848評(píng)論 3 312
  • 文/蒙蒙 一害幅、第九天 我趴在偏房一處隱蔽的房頂上張望消恍。 院中可真熱鬧,春花似錦以现、人聲如沸狠怨。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,726評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)佣赖。三九已至,卻和暖如春记盒,著一層夾襖步出監(jiān)牢的瞬間憎蛤,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,952評(píng)論 1 264
  • 我被黑心中介騙來(lái)泰國(guó)打工纪吮, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留俩檬,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,271評(píng)論 2 360
  • 正文 我出身青樓彬碱,卻偏偏與公主長(zhǎng)得像豆胸,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子巷疼,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,452評(píng)論 2 348

推薦閱讀更多精彩內(nèi)容

  • 今天和舍友因?yàn)樾∈鲁沉艘患芡砗驗(yàn)榕e手之勞的一些事兩個(gè)人都在互相生著對(duì)方的氣 朋友之間的包容呀,是兩個(gè)人親密無(wú)間的前...
    琉璃珀閱讀 136評(píng)論 0 0
  • 老鄭_e744閱讀 168評(píng)論 0 0