單元測試之?dāng)嘌?/h1>

單元測試之?dāng)嘌?/h2>

作為前端開發(fā),很少去自己寫單元測試篷帅。對于單元測試的了解也很少史侣,自學(xué)了一點(diǎn)關(guān)于單元測試斷言的知識拴泌,有了一些自己的個人理解,記錄下來惊橱,方便下次使用時查閱蚪腐。

什么是斷言

當(dāng)你對類,模塊或者方法的可以接受的輸入和輸出有著很明確的定義和認(rèn)識税朴,當(dāng)程序的輸出結(jié)果和輸入不匹配時回季,
你想讓程序有一個明確的返回。比如:我明確地知道1+1=2,我現(xiàn)在就想知道我輸入1+1會不會得到2正林。如果不是程序返回一個錯誤泡一。這時候我們通常會使用到斷言

斷言就是專門用來驗(yàn)證輸出和期望是否一致的一個工具觅廓。在內(nèi)容的實(shí)現(xiàn)上鼻忠,它是通過比較一個實(shí)際值actual和一個期望值expected來實(shí)現(xiàn)的。下面介紹一個使用較為廣泛的斷言庫chai.js

chai.js斷言庫

  1. 安裝和導(dǎo)入
npm i chai
import chai from 'chai'
let expect = chai.expect;
  1. 使用
let foo = 'bar';
expect(foo).to.equal('bar');

chai的使用是類似于鏈?zhǔn)秸{(diào)用的形式杈绸。以expect(foo).to.be.a('string');為例帖蔓,
通過.我么你可以把這個鏈?zhǔn)椒譃閹讉€部分:

  • expect(foo)
  • to
  • be
  • a('string')
    我們逐步來理解這幾個部分:
    expect(foo):是你要斷言的對象,翻譯過來就是我希望某某某
    to:虛詞瞳脓,單純作為語言鏈提供以期提高斷言的可讀性塑娇,它本身并不具有斷言功能。
    be:同to一樣劫侧,是語言鏈調(diào)用提高可讀性埋酬。
    a(string)a(type)是一個斷言,用來判斷測試紙的類型烧栋。type是被測試值的類型写妥,也就是斷言的期望值。

那么根據(jù)上面的分析劲弦,我們可以知道實(shí)現(xiàn)一個斷言需要這幾個部分:

  1. 要斷言的對象
  2. 不具備斷言功能的斷言詞
  3. 具備斷言功能的斷言詞
  4. 以及期望結(jié)果
    要斷言的對象和期望結(jié)果都是需要根據(jù)實(shí)際輸入和輸出進(jìn)行設(shè)置的。因此我們主要是講解斷言詞醇坝。

不具備斷言功能的斷言詞

  • to
  • be
  • been
  • is
  • that
  • which
  • and
  • has
  • have
  • with
  • at
  • of
  • same
  • but
  • does
  • still
    這些斷言詞其實(shí)沒有意義邑跪,你把它去掉也不受到影響。比如:
expect(foo).to.equal('bar');
expect(foo).equal('bar');

上面兩個斷言能夠?qū)崿F(xiàn)相同的功能呼猪。也就是說這些詞語使不使用沒什么影響画畅。
接下來說一下具備斷言功能的斷言詞。

具備斷言功能的斷言詞

  • equal
    equal是一個基本上萬能的斷言詞宋距,絕大多數(shù)的斷言都可以轉(zhuǎn)換成使用equal來實(shí)現(xiàn)轴踱。

比如判斷變量長度是否為3,我們可以使用lengthOf,同樣可以使用equal實(shí)現(xiàn)

expect(foo).have.lengthOf(3);
expect(foo.length).equal(3)谚赎;

比如判斷數(shù)據(jù)類型:我們既可以使用a淫僻,同樣可以使用equal實(shí)現(xiàn)

expect(foo).to.be.a('string');
expect(typeof foo).to.equal('string');
  • .deep
    deep主要是用來遞歸比較對象的鍵值對诱篷,而不是比較對象本身。通常配合equalproperty進(jìn)行使用雳灵。
    比如:
expect([1,2]).equal([1,2]) // 斷言不通過

上面的斷言無法通過棕所,因?yàn)橐妙愋偷谋容^的是對象。接下來我們看使用deep

expect([1,2]).deep.equal([1,2]) // 斷言通過

也就是說如果是數(shù)組悯辙,對象等引用類型時琳省,要比較里面的值需要使用deep

通過使用equaldeep我們基本上能夠?qū)崿F(xiàn)絕大多數(shù)的斷言躲撰。更多的關(guān)于斷言
可以參考官網(wǎng)

說明

目前只是介紹了expect的使用针贬,其實(shí)chai.js還有assertshould兩種斷言方式被因。
其中expect主要適用于行為驅(qū)動測試(Behavior Driven Development.BDD)逊朽。其他兩種斷言方式,以后用到了再進(jìn)行介紹毡惜。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者

  • 序言:七十年代末瓤狐,一起剝皮案震驚了整個濱河市瞬铸,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌础锐,老刑警劉巖嗓节,帶你破解...
    沈念sama閱讀 216,324評論 6 498
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異皆警,居然都是意外死亡拦宣,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,356評論 3 392
  • 文/潘曉璐 我一進(jìn)店門信姓,熙熙樓的掌柜王于貴愁眉苦臉地迎上來鸵隧,“玉大人,你說我怎么就攤上這事意推《固保” “怎么了?”我有些...
    開封第一講書人閱讀 162,328評論 0 353
  • 文/不壞的土叔 我叫張陵菊值,是天一觀的道長外驱。 經(jīng)常有香客問我,道長腻窒,這世上最難降的妖魔是什么昵宇? 我笑而不...
    開封第一講書人閱讀 58,147評論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮儿子,結(jié)果婚禮上瓦哎,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好蒋譬,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,160評論 6 388
  • 文/花漫 我一把揭開白布割岛。 她就那樣靜靜地躺著,像睡著了一般羡铲。 火紅的嫁衣襯著肌膚如雪蜂桶。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,115評論 1 296
  • 那天也切,我揣著相機(jī)與錄音扑媚,去河邊找鬼。 笑死雷恃,一個胖子當(dāng)著我的面吹牛疆股,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播倒槐,決...
    沈念sama閱讀 40,025評論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼旬痹,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了讨越?” 一聲冷哼從身側(cè)響起两残,我...
    開封第一講書人閱讀 38,867評論 0 274
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎把跨,沒想到半個月后人弓,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,307評論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡着逐,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,528評論 2 332
  • 正文 我和宋清朗相戀三年崔赌,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片耸别。...
    茶點(diǎn)故事閱讀 39,688評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡健芭,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出秀姐,到底是詐尸還是另有隱情慈迈,我是刑警寧澤,帶...
    沈念sama閱讀 35,409評論 5 343
  • 正文 年R本政府宣布省有,位于F島的核電站痒留,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏锥咸。R本人自食惡果不足惜狭瞎,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,001評論 3 325
  • 文/蒙蒙 一细移、第九天 我趴在偏房一處隱蔽的房頂上張望搏予。 院中可真熱鬧,春花似錦弧轧、人聲如沸雪侥。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,657評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽速缨。三九已至锌妻,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間旬牲,已是汗流浹背仿粹。 一陣腳步聲響...
    開封第一講書人閱讀 32,811評論 1 268
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留原茅,地道東北人吭历。 一個月前我還...
    沈念sama閱讀 47,685評論 2 368
  • 正文 我出身青樓,卻偏偏與公主長得像擂橘,于是被迫代替她去往敵國和親晌区。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,573評論 2 353

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