摘要:全局檢查,如果勾選了這項(xiàng),在進(jìn)行測試之前,會(huì)檢查測試之前和測試之后對(duì)象中的屬性,如果前后不一樣,就會(huì)顯示不通過。
1、簡介
QUnit是前端單元測試的框架,與java的JUnit相似,首先安裝QUnit,有三種方式:
官網(wǎng)下載源文件
引用CDN
使用 bower 安裝( bower install --save-dev qunit ) 或 使用npm安裝( npm install --save-dev qunitjs )
2、常用代碼簡介2.1 開始測試
QUnit.test( name, expected, test ) :一個(gè)常規(guī)的測試用例。測試用例名、期待斷言數(shù)、測試內(nèi)容(一般是一個(gè)function)。
QUnit.asyncTest( name, expected, test ) :一個(gè)異步測試用例。默認(rèn)的test都是同步的。內(nèi)容中必須顯示地調(diào)用start(),測試才會(huì)開始。
QUnit.module( name, lifecycle ) :定義一個(gè)名為name的模塊。在可選參數(shù)lifecycle中,可以定義模塊開始和結(jié)束的測試內(nèi)容。具體見文檔。
QUnit.init( ) :啟動(dòng)QUnit測試。如果測試在進(jìn)行中,則會(huì)重新啟動(dòng)。基本不用。
2.2 QUnit斷言方法
assert.ok( state, message ) :真假斷言,state為true則通過。類似于JUnit的assertTrue。
assert.equal( actual, expected, message ) :相等斷言,actual和expected相等(==)則通過。類似于JUnit的assertEquals。
assert.notEqual( actual, expected, message )不等斷言,actual和expected不相等(!=)則通過。類似于JUnit的assertNotEquals。
assert.deepEqual( actual, expected, message )遞歸相等斷言,actual和expected全相等(包括其子元素都相等,適用于基本類型,數(shù)組和對(duì)象)則通過。對(duì)于基本類型,相當(dāng)于strictEqual,可以通過{key : value}是否相等比較兩個(gè)對(duì)象是否相等。
assert.notDeepEqual( actual, expected, message )遞歸不相等斷言,actual和expected不全相等(包括其子元素都相等,適用于基本類型,數(shù)組和對(duì)象)則通過。對(duì)于基本類型,相當(dāng)于notStrictEqual。
assert.strictEqual( actual, expected, message )全相等斷言,actual和expected全相等(===)則通過。
assert.notStrictEqual( actual, expected, message )不全相等斷言,actual和expected不全相等(===)則通過。
assert.propEqual(value, expected[, message]) 比較真實(shí)和期待(expected )的對(duì)象的屬性和屬性值是否相同,相同斷言通過,注意這個(gè)方法可以比較構(gòu)造函數(shù)和原型不同的兩個(gè)對(duì)象
assert.notPropEqual(value, expected[, message]) 與propEqual相反。
assert.expect( amount )本測試?yán)锲诖龝?huì)執(zhí)行amount個(gè)斷言,大于或少于這個(gè)數(shù)量,測試都將失敗。
assert.raises( block, expected, message )異常斷言,block中拋出異常則通過,expected為可選參數(shù),是所期待拋出異常名的正則表達(dá)式。
2.3 把QUnit集成到現(xiàn)有工具
QUnit在執(zhí)行的過程中會(huì)調(diào)用一系列函數(shù),告知外界運(yùn)行狀況,大家可以覆蓋這些函數(shù),達(dá)到集成的目的。
QUnit.begin()當(dāng)QUnit開始時(shí)會(huì)調(diào)用此函數(shù)。
QUnit.done()當(dāng)QUnit結(jié)束后會(huì)調(diào)用此函數(shù)。
QUnit.moduleStart({ name })每當(dāng)一個(gè)模塊執(zhí)行開始時(shí)會(huì)調(diào)用此函數(shù)。
QUnit.moduleDone({ name, failed, passed, total })每當(dāng)一個(gè)模塊執(zhí)行結(jié)束后會(huì)調(diào)用此函數(shù)。
QUnit.testStart({ name }):測試執(zhí)行開始時(shí)會(huì)調(diào)用此函數(shù)。
QUnit.testDone({ name, failed, passed, total })每當(dāng)一個(gè)測試執(zhí)行結(jié)束后會(huì)調(diào)用此函數(shù)。
QUnit.log({ result, actual, expected, message }):斷言執(zhí)行結(jié)束后會(huì)調(diào)用此函數(shù)。
在后面的實(shí)例中,我寫了一些覆蓋,打印了執(zhí)行過程。相信有了這些回調(diào)函數(shù)的幫助,寫一個(gè)進(jìn)度條出來也不是難事。
2.4 QUnit的過濾器
Hide passed tests:隱藏通過的測試,勾選后通過的測試就不顯示。使用了HTML5的sessionStorage技術(shù),頁面重新載入的時(shí)候只測試之前那部分沒有通過的case。
Check for Globals:”全局檢查“,如果勾選了這項(xiàng),在進(jìn)行測試之前,QUnit會(huì)檢查測試之前和測試之后window對(duì)象中的屬性,如果前后不一樣,就會(huì)顯示不通過。
No try-catch: QUnit不使用try-catch跑測試,當(dāng)有異常拋出的時(shí)候,測試運(yùn)行器會(huì)停止運(yùn)行,但會(huì)獲得一個(gè)內(nèi)部異常,在我們使用老瀏覽器(例如ie6)做測試的時(shí)候會(huì)有幫助。
Rerun:重新測試該用例
Enable coverage:查看測試代碼的覆蓋率,需要引入文件sap.ui.qunit.qunit-coverage
2.5 QUnit Test對(duì)象
QUnit的每個(gè)test函數(shù)都會(huì)生成Test類相應(yīng)的實(shí)例,每個(gè)實(shí)例都5個(gè)生命周期,每個(gè)Test實(shí)例的生命周期方法都會(huì)順序加入config.queue中順序執(zhí)行,生命周期如下:
init
setup
run函數(shù)負(fù)責(zé)運(yùn)行正真的測試代碼
teardown
finish負(fù)責(zé)將統(tǒng)計(jì)好的測試結(jié)果顯示到頁面上
如果run中有異步的代碼,順序執(zhí)行run、teardown和finish之后,異步代碼還沒執(zhí)行,其測試的結(jié)果就無法正確統(tǒng)計(jì)。 因此應(yīng)調(diào)用Qunit.start()和Qunit. stop()函數(shù),分別設(shè)置config.blocking true或者false來控制執(zhí)行隊(duì)列暫?;驁?zhí)行,從而等待異步代碼執(zhí)行,正確統(tǒng)計(jì)執(zhí)行結(jié)果。
更多API參考官網(wǎng)文檔:https://qunitjs.com/
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/94414.html
摘要:很快我發(fā)現(xiàn)有一個(gè)誤區(qū),許多人認(rèn)為單元測試必須是一個(gè)集中運(yùn)行所有單元的測試,并一目了然。許多人認(rèn)為單元測試,甚至整個(gè)測試都是在編碼結(jié)束后的一道工序,而修復(fù)也不過是在做垃圾掩埋一類的工作。 單元測試Unit Test 很早就知道單元測試這樣一個(gè)概念,但直到幾個(gè)月前,我真正開始接觸和使用它。究竟什么是單元測試?我想也許很多使用了很久的人也不一定能描述的十分清楚,所以寫了這篇文章來嘗試描述它...
摘要:不論你是在寫瀏覽器端還是后端的,總存在那么一個(gè)問題我該使用什么單元測試庫去確保我的代碼如預(yù)期的運(yùn)行呢總是有那么一些流行的框架可供選擇。在中仍然流行,并且擁有來自許多地方性的支持。如果你的測試使用它,直到調(diào)用了才能通過。 不論你是在寫瀏覽器端javascript還是后端的nodejs,總存在那么一個(gè)問題:我該使用什么單元測試庫去確保我的代碼如預(yù)期的運(yùn)行呢?總是有那么一些流行的框架可供選擇...
摘要:具體來說,包管理器就是可以通過命令行,幫助你把外部庫和插件放到你的項(xiàng)目里面并在之后進(jìn)行版本升級(jí),這樣就不用手工復(fù)制和更新庫?,F(xiàn)在有的包管理器主要是和。 一、基礎(chǔ) 1、學(xué)習(xí)HTML基礎(chǔ) HTML給你的網(wǎng)頁賦予了結(jié)構(gòu)。它就像是人的骨架那樣讓你保持站立。首先你需要去學(xué)習(xí)語法以及它必須提供的一切。你的學(xué)習(xí)應(yīng)該聚焦在下面這些東西上: 學(xué)習(xí)HTML基礎(chǔ),了解如何編寫語義HTML 理解如何把網(wǎng)頁分...
摘要:具體來說,包管理器就是可以通過命令行,幫助你把外部庫和插件放到你的項(xiàng)目里面并在之后進(jìn)行版本升級(jí),這樣就不用手工復(fù)制和更新庫?,F(xiàn)在有的包管理器主要是和。 一、基礎(chǔ) 1、學(xué)習(xí)HTML基礎(chǔ) HTML給你的網(wǎng)頁賦予了結(jié)構(gòu)。它就像是人的骨架那樣讓你保持站立。首先你需要去學(xué)習(xí)語法以及它必須提供的一切。你的學(xué)習(xí)應(yīng)該聚焦在下面這些東西上: 學(xué)習(xí)HTML基礎(chǔ),了解如何編寫語義HTML 理解如何把網(wǎng)頁分...
閱讀 3298·2021-11-15 11:37
閱讀 1119·2021-11-02 14:45
閱讀 3925·2021-09-04 16:48
閱讀 3606·2019-08-30 15:55
閱讀 783·2019-08-23 17:53
閱讀 1016·2019-08-23 17:03
閱讀 2060·2019-08-23 16:43
閱讀 2211·2019-08-23 16:22