溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

JavaScript單元測試的作用是什么

發(fā)布時間:2021-06-22 16:05:25 來源:億速云 閱讀:150 作者:chen 欄目:web開發(fā)

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

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

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

1、什么是單元測試?有什么用?

在計算機編程中,單元測試(又稱為模塊測試)是針對程序模塊(軟件設(shè)計的最小單位)來進行正確性檢驗的測試工作。程序單元是應(yīng)用的最小可測試部件。在過程化編程中,一個單元就是單個程序、函數(shù)、過程等;對于面向?qū)ο缶幊?,最小單元就是方法,包括基類(超類)、抽象類、或者派生類(子類)中的方法?/p>

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

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

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

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

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

3、單元測試常用框架

l   QUnit框架

a) 簡介

QUnit是jQuery團隊開發(fā)的JavaScript單元測試工具,功能強大且使用簡單。目前所有的JQuery代碼都使用QUnit進行測試,原生的JavaScript也可以使用QUnit。

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

b)優(yōu)點

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

非常簡單,容易上手,目前公開的API只有19個;

不需要依賴其它任何軟件包或框架,只要能運行JS的地方就可以,QUnit本身只有一個JS文件和CSS文件,當然如果需要可以和jQuery等其它框架集成;

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

c) 不足

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

l  Jasmine框架

a)簡介

Jasmine是一個有名的JavaScript單元測試框架,它是獨立的行為驅(qū)動開發(fā)框架,語法清晰易懂。

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

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

BDD的做法包括:

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

l  使用特性注入方法繪制出達到這些目標所需要的特性

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

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

l  通過自動運行這些例子,提供快速反饋,進行回歸測試

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

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

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

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

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

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

b)       優(yōu)點

它是基于行為驅(qū)動開發(fā)實現(xiàn)的測試框架,它的語法非常貼近自然語言,簡單明了,容易理解。

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

它有豐富的API,同時用戶也支持用戶擴展它的API,這一點很少有其它框架能夠做到。

使用方便簡單,只需要引入兩個js文件即可

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

對于Ruby語言有特別的支持,能夠非常方便的集成到Ruby項目中去

c) 不足

在瀏覽器中的測試界面不如QUnit美觀、詳細。

l  JsTestDriver

a)        簡介

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

b)       優(yōu)點

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

測試運行得很快,因為不需要將結(jié)果添加到DOM中呈現(xiàn)出來,它們能夠同時在任意多的瀏覽器中運行,未修改的文件瀏覽器會從緩存提取。

不需要HTML配件文件,僅僅只需提供一個或多個腳本和測試腳本,測試運行器運行時會創(chuàng)建一個空文件。

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

有Eclipse和IntelliJ插件,可以很方便的在這兩個IDE中進行測試,和JUnit很像。

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

c)        不足

不能在瀏覽器中測試,只能通過自動化工具或控制臺運行。生成的結(jié)果不夠直觀。

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

l  FireUnit

a)        簡介

FireUnit是一個基于Firebug的Javascript的單元測試框架。簡單說來,F(xiàn)ireUnit給Firebug增加了一個標簽面板,并提供了一些簡單的JavaScript API來記錄和查看測試。

b)       優(yōu)點

簡單易用

c)        不足

功能不多,測試代碼常常寫在源碼里,雖然可以實時地看到效果,但耦合太強,不易清理

只運行在Firefox下

到此,關(guān)于“JavaScript單元測試的作用是什么”的學(xué)習(xí)就結(jié)束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學(xué)習(xí),快去試試吧!若想繼續(xù)學(xué)習(xí)更多相關(guān)知識,請繼續(xù)關(guān)注億速云網(wǎng)站,小編會繼續(xù)努力為大家?guī)砀鄬嵱玫奈恼拢?/p>

向AI問一下細節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI