JavaScript單元測(cè)試的作用是什么

這篇文章主要介紹“JavaScript單元測(cè)試的作用是什么”,在日常操作中,相信很多人在JavaScript單元測(cè)試的作用是什么問(wèn)題上存在疑惑,小編查閱了各式資料,整理出簡(jiǎn)單好用的操作方法,希望對(duì)大家解答”JavaScript單元測(cè)試的作用是什么”的疑惑有所幫助!接下來(lái),請(qǐng)跟著小編一起來(lái)學(xué)習(xí)吧!

創(chuàng)新互聯(lián)是專(zhuān)業(yè)的澤庫(kù)網(wǎng)站建設(shè)公司,澤庫(kù)接單;提供成都網(wǎng)站建設(shè)、網(wǎng)站建設(shè),網(wǎng)頁(yè)設(shè)計(jì),網(wǎng)站設(shè)計(jì),建網(wǎng)站,PHP網(wǎng)站建設(shè)等專(zhuān)業(yè)做網(wǎng)站服務(wù);采用PHP框架,可快速的進(jìn)行澤庫(kù)網(wǎng)站開(kāi)發(fā)網(wǎng)頁(yè)制作和功能擴(kuò)展;專(zhuān)業(yè)做搜索引擎喜愛(ài)的網(wǎng)站,專(zhuān)業(yè)的做網(wǎng)站團(tuán)隊(duì),希望更多企業(yè)前來(lái)合作!

在JavaScript中,單元測(cè)試是針對(duì)程序模塊(軟件設(shè)計(jì)的最小單位)來(lái)進(jìn)行正確性檢驗(yàn)的測(cè)試工作,其目標(biāo)是隔離程序模塊并證明這些單個(gè)模塊是正確的。單元測(cè)試能確保在開(kāi)發(fā)過(guò)程的早期就發(fā)現(xiàn)問(wèn)題,可以使程序員方便地檢查代碼片斷是否依然正常工作。

本教程操作環(huán)境:windows7系統(tǒng)、javascript1.8.5版、Dell G3電腦。

1、什么是單元測(cè)試?有什么用?

在計(jì)算機(jī)編程中,單元測(cè)試(又稱(chēng)為模塊測(cè)試)是針對(duì)程序模塊(軟件設(shè)計(jì)的最小單位)來(lái)進(jìn)行正確性檢驗(yàn)的測(cè)試工作。程序單元是應(yīng)用的最小可測(cè)試部件。在過(guò)程化編程中,一個(gè)單元就是單個(gè)程序、函數(shù)、過(guò)程等;對(duì)于面向?qū)ο缶幊蹋钚卧褪欠椒?,包括基?lèi)(超類(lèi))、抽象類(lèi)、或者派生類(lèi)(子類(lèi))中的方法。

每個(gè)理想的測(cè)試案例獨(dú)立于其它案例;為測(cè)試時(shí)隔離模塊,經(jīng)常使用stubs、mock 或fake等測(cè)試馬甲程序。單元測(cè)試通常由軟件開(kāi)發(fā)人員編寫(xiě),用于確保他們所寫(xiě)的代碼符合軟件需求和遵循開(kāi)發(fā)目標(biāo)。

單元測(cè)試的目標(biāo)是隔離程序模塊并證明這些單個(gè)模塊是正確的。單元測(cè)試能確保在開(kāi)發(fā)過(guò)程的早期就能發(fā)現(xiàn)問(wèn)題,是為了讓程序“死得更早”。我們應(yīng)該從開(kāi)發(fā)的早期就為所有函數(shù)和方法編寫(xiě)單元測(cè)試,可讀性強(qiáng)的單元測(cè)試可以使程序員方便地檢查代碼片斷是否依然正常工作。良好設(shè)計(jì)的單元測(cè)試案例覆蓋程序單元分支和循環(huán)條件的所有路徑。采用這種自底向上的測(cè)試路徑,先測(cè)試程序模塊再測(cè)試模塊的集合,一旦變更導(dǎo)致錯(cuò)誤發(fā)生,借助于單元測(cè)試可以快速定位并修復(fù)錯(cuò)誤。

2、JavaScript單元測(cè)試現(xiàn)狀

單元測(cè)試在后臺(tái)開(kāi)發(fā)中非常流行和普及,比如JAVA開(kāi)發(fā)者的JUnit等,而在前端開(kāi)發(fā)中則使用的非常少。究其原因,主要是單元測(cè)試更適用于邏輯代碼的測(cè)試,這對(duì)于JAVA等后臺(tái)編程語(yǔ)言來(lái)說(shuō)測(cè)試起來(lái)非常方便,但是前端開(kāi)發(fā)很多時(shí)候要要UI打交道,UI相關(guān)的代碼不是不可以進(jìn)行單元測(cè)試,但的確很麻煩,比起邏輯代碼來(lái)說(shuō)困難多了,這就導(dǎo)致了單元測(cè)試在前端開(kāi)發(fā)沒(méi)有普及起來(lái)。

但是隨著單元測(cè)試的普及,尤其是敏捷開(kāi)發(fā)的推動(dòng),涌現(xiàn)了許多優(yōu)秀的JavaScript單元測(cè)試框架,如QUnit、Jasmine等。所有的這些框架基本上都能對(duì)Javascript代碼進(jìn)行很好的測(cè)試,當(dāng)然UI部分的代碼測(cè)試一樣比較麻煩,但是我們可以通過(guò)精心構(gòu)造我們的測(cè)試代碼來(lái)測(cè)試部分UI代碼。但是每個(gè)框架都不是萬(wàn)能的,它們都有各自擅長(zhǎng)的領(lǐng)域,下面選取了幾個(gè)具有代表性的框架進(jìn)行介紹。

3、單元測(cè)試常用框架

l   QUnit框架

a) 簡(jiǎn)介

QUnit是jQuery團(tuán)隊(duì)開(kāi)發(fā)的JavaScript單元測(cè)試工具,功能強(qiáng)大且使用簡(jiǎn)單。目前所有的JQuery代碼都使用QUnit進(jìn)行測(cè)試,原生的JavaScript也可以使用QUnit。

最初,John Resig將QUnit設(shè)計(jì)為jQuery的一部分。2008年,QUnit才有了自己的名字、主頁(yè)和API文檔,也開(kāi)始允許其他人用它來(lái)做單元測(cè)試。但當(dāng)時(shí)QUnit還是基于jQuery的。直到2009年,QUnit才可以完全的獨(dú)立運(yùn)行。

b)優(yōu)點(diǎn)

使用起來(lái)非常方便,有漂亮的外觀和完整的測(cè)試功能(包括異步測(cè)試);

非常簡(jiǎn)單,容易上手,目前公開(kāi)的API只有19個(gè);

不需要依賴(lài)其它任何軟件包或框架,只要能運(yùn)行JS的地方就可以,QUnit本身只有一個(gè)JS文件和CSS文件,當(dāng)然如果需要可以和jQuery等其它框架集成;

不僅支持在瀏覽器中測(cè)試,還支持在Rhino和node.js等后端測(cè)試。

c) 不足

對(duì)自動(dòng)化支持不好,很難和Ant、Maven或自動(dòng)構(gòu)建等工具集成,主要用在瀏覽器中進(jìn)行測(cè)試。

l  Jasmine框架

a)簡(jiǎn)介

Jasmine是一個(gè)有名的JavaScript單元測(cè)試框架,它是獨(dú)立的行為驅(qū)動(dòng)開(kāi)發(fā)框架,語(yǔ)法清晰易懂。

行為驅(qū)動(dòng)開(kāi)發(fā)(BDD):是一種敏捷軟件開(kāi)發(fā)的技術(shù),它鼓勵(lì)軟件項(xiàng)目中的開(kāi)發(fā)者、QA和非技術(shù)人員或商業(yè)參與者之間的協(xié)作。BDD最初是由Dan North在2003年命名,它包括驗(yàn)收和客戶(hù)測(cè)試驅(qū)動(dòng)等的極限編程的實(shí)踐,作為對(duì)測(cè)試驅(qū)動(dòng)開(kāi)發(fā)的回應(yīng)。在過(guò)去的數(shù)年里,得到了極大的發(fā)展。

BDD的重點(diǎn)是通過(guò)與利益相關(guān)者的討論取得對(duì)預(yù)期的軟件行為的清醒認(rèn)識(shí)。它通過(guò)用自然語(yǔ)言書(shū)寫(xiě)非程序員可讀的測(cè)試用例擴(kuò)展了測(cè)試驅(qū)動(dòng)開(kāi)發(fā)方法。行為驅(qū)動(dòng)開(kāi)發(fā)人員使用混合了領(lǐng)域中統(tǒng)一的語(yǔ)言的母語(yǔ)語(yǔ)言來(lái)描述他們的代碼的目的。這讓開(kāi)發(fā)者得以把精力集中在代碼應(yīng)該怎么寫(xiě),而不是技術(shù)細(xì)節(jié)上,而且也最大程度的減少了將代碼編寫(xiě)者的技術(shù)語(yǔ)言與商業(yè)客戶(hù)、用戶(hù)、利益相關(guān)者、項(xiàng)目管理者等的領(lǐng)域語(yǔ)言之間來(lái)回翻譯的代價(jià)。

BDD的做法包括:

l  確立不同利益相關(guān)者要實(shí)現(xiàn)的遠(yuǎn)景目標(biāo)

l  使用特性注入方法繪制出達(dá)到這些目標(biāo)所需要的特性

l  通過(guò)由外及內(nèi)的軟件開(kāi)發(fā)方法,把涉及到的利益相關(guān)者融入到實(shí)現(xiàn)的過(guò)程中

l  使用例子來(lái)描述應(yīng)用程序的行為或代碼的每個(gè)單元

l  通過(guò)自動(dòng)運(yùn)行這些例子,提供快速反饋,進(jìn)行回歸測(cè)試

l  使用“應(yīng)當(dāng)(should)”來(lái)描述軟件的行為,以幫助闡明代碼的職責(zé),以及回答對(duì)該軟件的功能性的質(zhì)疑

l  使用“確保(ensure)”來(lái)描述軟件的職責(zé),以把代碼本身的效用與其他單元(element)代碼帶來(lái)的邊際效用中區(qū)分出來(lái)。

l  使用mock作為還未編寫(xiě)的相關(guān)代碼模塊的替身

BDD特性注入:一個(gè)公司可能有多個(gè)會(huì)帶來(lái)商業(yè)利益的不同愿景,通常包括盈利、省錢(qián)或保護(hù)錢(qián)。一旦某個(gè)愿景被開(kāi)發(fā)小組確定為當(dāng)前條件下的最佳愿景,他們將需要更多的幫助來(lái)成功實(shí)現(xiàn)這個(gè)遠(yuǎn)景。

然后確定該愿景的主要利益相關(guān)者,會(huì)帶入其他的利益相關(guān)者。每個(gè)相關(guān)者要定義為了實(shí)現(xiàn)該愿景他們需要完成的目標(biāo)。例如,法務(wù)部門(mén)可能要求某些監(jiān)管要得到滿(mǎn)足。市場(chǎng)營(yíng)銷(xiāo)負(fù)責(zé)人可能要參加將使用該軟件的用戶(hù)的社區(qū)。安全專(zhuān)家需要確保該軟件不會(huì)受到SQL注入的攻擊。

通過(guò)這些目標(biāo),會(huì)定義出要實(shí)現(xiàn)這些目標(biāo)所需要的大概的題目或者特性集合。例如,“允許用戶(hù)排序貢獻(xiàn)值”或“交易審計(jì)”。從這些主題,可以確定用戶(hù)功能以及用戶(hù)界面的第一批細(xì)節(jié)。

b)       優(yōu)點(diǎn)

它是基于行為驅(qū)動(dòng)開(kāi)發(fā)實(shí)現(xiàn)的測(cè)試框架,它的語(yǔ)法非常貼近自然語(yǔ)言,簡(jiǎn)單明了,容易理解。

能很方便的和Ant、Maven等進(jìn)行集成進(jìn)行自動(dòng)化測(cè)試,也可以方便和Jekins等持續(xù)集成工具進(jìn)行集成,可以生成測(cè)試結(jié)果的XMl文檔。

它有豐富的API,同時(shí)用戶(hù)也支持用戶(hù)擴(kuò)展它的API,這一點(diǎn)很少有其它框架能夠做到。

使用方便簡(jiǎn)單,只需要引入兩個(gè)js文件即可

不僅支持在瀏覽器中測(cè)試,還支持在Rhino和node.js等后端測(cè)試。

對(duì)于Ruby語(yǔ)言有特別的支持,能夠非常方便的集成到Ruby項(xiàng)目中去

c) 不足

在瀏覽器中的測(cè)試界面不如QUnit美觀、詳細(xì)。

l  JsTestDriver

a)        簡(jiǎn)介

JsTestDriver是一個(gè)JavaScript單元測(cè)試工具,易于與持續(xù)構(gòu)建系統(tǒng)相集成并能夠在多個(gè)瀏覽器上運(yùn)行測(cè)試輕松實(shí)現(xiàn)TDD風(fēng)格的開(kāi)發(fā)。當(dāng)在項(xiàng)目中配置好JsTestDriver以后,如同junit測(cè)試java文件一般,JsTestDriver可以直接通過(guò)運(yùn)行js文件來(lái)進(jìn)行單元測(cè)試。JsTestDriver框架本身就是JAVA的jar包,需要在本地運(yùn)行并監(jiān)聽(tīng)一個(gè)端口。

b)       優(yōu)點(diǎn)

可以一次測(cè)試多個(gè)瀏覽器,使用方法是在啟動(dòng)服務(wù)時(shí)可以將多個(gè)瀏覽器的路徑作為參數(shù)傳進(jìn)去??梢栽诙嗯_(tái)機(jī)器上的瀏覽器中運(yùn)行,包括移動(dòng)設(shè)備。

測(cè)試運(yùn)行得很快,因?yàn)椴恍枰獙⒔Y(jié)果添加到DOM中呈現(xiàn)出來(lái),它們能夠同時(shí)在任意多的瀏覽器中運(yùn)行,未修改的文件瀏覽器會(huì)從緩存提取。

不需要HTML配件文件,僅僅只需提供一個(gè)或多個(gè)腳本和測(cè)試腳本,測(cè)試運(yùn)行器運(yùn)行時(shí)會(huì)創(chuàng)建一個(gè)空文件。

能很方便的和Ant、Maven等進(jìn)行集成進(jìn)行自動(dòng)化測(cè)試,也可以方便和Jekins等持續(xù)集成工具進(jìn)行集成,可以生成測(cè)試結(jié)果的XML文檔。

有Eclipse和IntelliJ插件,可以很方便的在這兩個(gè)IDE中進(jìn)行測(cè)試,和JUnit很像。

支持其它測(cè)試框架,可以測(cè)試其它測(cè)試框架寫(xiě)的測(cè)試代碼,比如有對(duì)應(yīng)的插件可以將QUnit和Jasmine測(cè)試代碼轉(zhuǎn)換成JsTestDriver的測(cè)試代碼。

c)        不足

不能在瀏覽器中測(cè)試,只能通過(guò)自動(dòng)化工具或控制臺(tái)運(yùn)行。生成的結(jié)果不夠直觀。

安裝使用稍微有點(diǎn)麻煩,依賴(lài)于JAVA環(huán)境。

l  FireUnit

a)        簡(jiǎn)介

FireUnit是一個(gè)基于Firebug的Javascript的單元測(cè)試框架。簡(jiǎn)單說(shuō)來(lái),F(xiàn)ireUnit給Firebug增加了一個(gè)標(biāo)簽面板,并提供了一些簡(jiǎn)單的JavaScript API來(lái)記錄和查看測(cè)試。

b)       優(yōu)點(diǎn)

簡(jiǎn)單易用

c)        不足

功能不多,測(cè)試代碼常常寫(xiě)在源碼里,雖然可以實(shí)時(shí)地看到效果,但耦合太強(qiáng),不易清理

只運(yùn)行在Firefox下

到此,關(guān)于“JavaScript單元測(cè)試的作用是什么”的學(xué)習(xí)就結(jié)束了,希望能夠解決大家的疑惑。理論與實(shí)踐的搭配能更好的幫助大家學(xué)習(xí),快去試試吧!若想繼續(xù)學(xué)習(xí)更多相關(guān)知識(shí),請(qǐng)繼續(xù)關(guān)注創(chuàng)新互聯(lián)網(wǎng)站,小編會(huì)繼續(xù)努力為大家?guī)?lái)更多實(shí)用的文章!

當(dāng)前名稱(chēng):JavaScript單元測(cè)試的作用是什么
分享路徑:http://muchs.cn/article8/ihedop.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供手機(jī)網(wǎng)站建設(shè)、外貿(mào)網(wǎng)站建設(shè)虛擬主機(jī)、網(wǎng)站設(shè)計(jì)公司、網(wǎng)頁(yè)設(shè)計(jì)公司、網(wǎng)站導(dǎo)航

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶(hù)投稿、用戶(hù)轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話(huà):028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

微信小程序開(kāi)發(fā)