聊聊前端單元測(cè)試

講講前端的單元測(cè)試

前言

我希望你看完這篇文章后,能夠?qū)δ愕拈_發(fā)流程有所啟發(fā),那就是我寫這篇文章的初衷了。

什么是單元測(cè)試

顧名思義單元測(cè)試就是測(cè)試最小單元,我們的單元可能是一個(gè)函數(shù),一個(gè)button的樣式,一個(gè)文案等等都可能是一個(gè)單元。那么我們?cè)谧鲂枨蟮臅r(shí)候沒(méi)有必要將所有的單元都做測(cè)試,那可能測(cè)試代碼要比需求代碼多得多呢。我們?cè)谧鲂枨笾靶枰崆跋牒梦覀兊臏y(cè)試用例,并針對(duì)測(cè)試用例編寫測(cè)試代碼,然后寫需求代碼。

為什么做單元測(cè)試

做前端的很多人可能不會(huì)去寫單元測(cè)試,認(rèn)為這是一個(gè)浪費(fèi)時(shí)間的事情,我們有這么多的需求,哪還有時(shí)間跟精力去編寫測(cè)試代碼?這么想當(dāng)然沒(méi)有錯(cuò),但是當(dāng)一個(gè)項(xiàng)目由多人一起維護(hù)的時(shí)候,假如A寫了一個(gè)頁(yè)面,B去維護(hù)A的頁(yè)面加了一些邏輯,C去維護(hù)該頁(yè)面再添加一些邏輯,當(dāng)A再去維護(hù)這個(gè)頁(yè)面的時(shí)候,可能就會(huì)發(fā)現(xiàn)已經(jīng)不是當(dāng)初他認(rèn)識(shí)的代碼了,函數(shù)也不是原來(lái)的語(yǔ)義,大部分的變量不知道干什么用的。那么A需要捋清楚B、C的邏輯,在B、C的基礎(chǔ)上小心翼翼的編寫新的需求,生怕哪一步寫錯(cuò),導(dǎo)致線上的代碼出錯(cuò)。長(zhǎng)此以往下去代碼越來(lái)越難以維護(hù),越來(lái)越少的人能看懂頁(yè)面內(nèi)的邏輯,糊墻試代碼將頁(yè)面堵得水泄不通!當(dāng)然這是最壞的想法,我們不防往好的一方面來(lái)想,假如我們每個(gè)人的編碼水平都很高,都按著規(guī)范去寫代碼,A寫完代碼,B去維護(hù)的時(shí)候?qū)的代碼全部了解之后健壯了新的代碼,C去維護(hù)的時(shí)候再把A、B的代碼全部掌握后再去寫代碼,一個(gè)月,三個(gè)月。。。

所以依賴我們自覺(jué)去維護(hù)代碼首先對(duì)我們個(gè)人能力有很大要求,其次對(duì)我們精力也是恨到的浪費(fèi)。我們要時(shí)刻注意是否自己的代碼影響到別人的代碼。從長(zhǎng)遠(yuǎn)考慮,單元測(cè)試是一個(gè)大型項(xiàng)目的必然選擇。

我們講的單元測(cè)試,只是測(cè)試代碼的最小單元,一個(gè)函數(shù)就是一個(gè)單元,在這里我要提倡大家去學(xué)習(xí)一下函數(shù)式編程。

單元測(cè)試賦予我們的能力

在寫這個(gè)答案之前我需要講一下TDD(測(cè)試驅(qū)動(dòng)開發(fā))。

你問(wèn)我什么是TDD?

TDD是一種思維,測(cè)試來(lái)推動(dòng)整個(gè)開發(fā)的進(jìn)行的思維。你在開發(fā)需求的時(shí)候或許不必寫單元測(cè)試,但是你必須要懂得TDD,才能讓你的代碼看起來(lái)得體。

或許你到現(xiàn)在為止并不清楚什么是TDD,接下來(lái)我用簡(jiǎn)單的語(yǔ)言來(lái)闡述一下。

正如上面的例子中A、B、c遇到的問(wèn)題,我們用TDD的思維來(lái)重新寫這個(gè)頁(yè)面。那么A在拿到需求之后首先應(yīng)該考慮所需要的測(cè)試用例有哪些,然后對(duì)這些測(cè)試用例編寫測(cè)試代碼,接著去編寫業(yè)務(wù)代碼。

什么是TDD

TDD (test-driven development)

  1. Add a test

在測(cè)試驅(qū)動(dòng)開發(fā)中,每個(gè)新特性都以編寫測(cè)試開始。編寫一個(gè)測(cè)試,它定義了一個(gè)函數(shù)或一個(gè)函數(shù)的改進(jìn),這應(yīng)該是非常簡(jiǎn)潔的。要編寫測(cè)試,開發(fā)人員必須清楚地了解該特性的規(guī)范和要求。開發(fā)人員可以通過(guò)use cases和user stories來(lái)完成這個(gè)任務(wù),以覆蓋需求和異常條件,并且可以在任何適合于軟件環(huán)境的測(cè)試框架中編寫測(cè)試。它可以是現(xiàn)有測(cè)試的修改版本。這是測(cè)試驅(qū)動(dòng)開發(fā)與編寫代碼后編寫單元測(cè)試的一個(gè)區(qū)別特性:它使開發(fā)人員在編寫代碼之前關(guān)注需求,這是一個(gè)微妙但重要的區(qū)別。

2、重構(gòu)

在我們維護(hù)代碼的過(guò)程中,必須定期清理不斷增長(zhǎng)的代碼。新代碼可以從方便的地方轉(zhuǎn)移到它更符合邏輯的地方。重復(fù)的代碼必須被刪除。對(duì)象、類、模塊、變量和方法名應(yīng)該清楚地表示它們當(dāng)前的用途,因?yàn)樘砑恿祟~外的功能,會(huì)導(dǎo)致很難去分辨命名的意義。等到代碼不斷的增加會(huì)使得規(guī)范的命名和刪除重復(fù)代碼越來(lái)越收益。

3、開發(fā)風(fēng)格轉(zhuǎn)換

測(cè)試代碼應(yīng)該在功能代碼之前去寫,這是被認(rèn)為有更多的好處。它能確定這個(gè)程序是為可測(cè)試而寫的,因?yàn)殚_發(fā)者需要從一開始就必須考慮如何編寫測(cè)試程序,而不是后面再去考慮。此外,寫測(cè)試代碼能夠更深的理解需求。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容