目錄:
- JavaScript組件之旅:分析和設(shè)計(jì)
- JavaScript組件之旅:編碼實(shí)現(xiàn)和算法
- JavaScript組件之旅:用Ant構(gòu)建組件
- JavaScript組件之旅:測(cè)試組件
本期,我們要討論的話題是 JavaScript 的測(cè)試,以檢查組件的狀態(tài)和工作方式是否符合預(yù)期,還會(huì)介紹一個(gè)可以方便編寫測(cè)試用例的測(cè)試方法。這里說的測(cè)試當(dāng)然是使用自動(dòng)化的測(cè)試手段,這是軟件質(zhì)量保證(QA)的重要環(huán)節(jié)。就本系列文章介紹的 Smart Queue 來說,我們的測(cè)試目標(biāo)包括:
- Task 對(duì)象的創(chuàng)建:第二期的代碼提供了多種創(chuàng)建方式,需要測(cè)試對(duì)象創(chuàng)建后的狀態(tài)。
- Queue 內(nèi)的任務(wù)運(yùn)行次序:我們提供了兩種改變運(yùn)行次序的方式:優(yōu)先級(jí)和依賴配置,同樣也要測(cè)試各種配置對(duì)次序的影響。
對(duì)于第一個(gè)目標(biāo),只需檢查對(duì)象創(chuàng)建后的屬性是否符合預(yù)期即可。我們已經(jīng)多次提到“符合預(yù)期”,斷言(Assert)正是為此而設(shè)計(jì)的。簡(jiǎn)單的說,斷言就是確保所測(cè)試的表達(dá)式結(jié)果為“真”,否則,以某種方式通知測(cè)試人員,并幫助其定位斷言失敗的測(cè)試用例。
第二個(gè)目標(biāo)稍稍有點(diǎn)復(fù)雜。由于我們?cè)诮M件編碼實(shí)現(xiàn)的時(shí)候,將排序后的隊(duì)列(_sorted)隱藏在了閉包中,所以外部是無(wú)法訪問的。有兩種方法可以考慮:(1)重構(gòu)代碼,增加代碼的可測(cè)試性,又有兩種重構(gòu)方法:(a)設(shè)置 debug 開關(guān),打開時(shí)將 _sorted 暴露給外部;(b)增加獨(dú)立文件,以構(gòu)建的方式拼接代碼最終生成一個(gè)測(cè)試版本。(2)測(cè)試行為的結(jié)果而不是過程,前一種方法實(shí)質(zhì)上是深入到組件的運(yùn)行時(shí)狀態(tài),而這個(gè)方法只是檢查組件的運(yùn)行結(jié)果。本期選用后一種種測(cè)試方式,第一種測(cè)試方式留給有興趣的讀者練習(xí):)
需要說明的是,我個(gè)人不贊成第一種的方法a. 為什么呢?我先說一下這個(gè)任務(wù)隊(duì)列的設(shè)計(jì)理念:
- 它只是一個(gè)隊(duì)列,只負(fù)責(zé)“按需”調(diào)整任務(wù)的運(yùn)行次序,不關(guān)注任務(wù)的個(gè)體細(xì)節(jié)。換句話說,它操作整體的任務(wù),而不關(guān)心任務(wù)具體的行為和表現(xiàn)。
- 它是個(gè)安全的隊(duì)列,使用者(第一期提到的“客戶”)可以放心把任務(wù)添加進(jìn)去,不用擔(dān)心這個(gè)任務(wù)信息會(huì)被其他客戶看到。需要說明的是,第二期實(shí)現(xiàn)代碼中有 SmartQueue.Queue = [[], [], []], 結(jié)果是外部可以訪問到隊(duì)列項(xiàng)。代碼僅供介紹之用,你可以安全地刪除 SmartQueue.Queue = 來達(dá)成安全控制。
出處:Alipay UED
責(zé)任編輯:bluehearts
上一頁(yè) 下一頁(yè) JavaScript組件之旅:測(cè)試組件 [2]
◎進(jìn)入論壇網(wǎng)頁(yè)制作、WEB標(biāo)準(zhǔn)化版塊參加討論,我還想發(fā)表評(píng)論。
|