前端常用單元測試(工具+框架)步驟歸納

前言

單元測試,簡單來說就是技術(shù)人員的白盒測試(程序測試)。為了減少產(chǎn)品的開發(fā)周期時間以及后期的修復(fù)代價,逐漸要求技術(shù)人員要在開發(fā)過程中梳理清晰自己開發(fā)功能邏輯,編寫相對應(yīng)的單元測試程序代碼,用于對自己思維邏輯實現(xiàn)的一個校驗測試。

前端開發(fā)人員編寫單元測試的工具和框架有幾個主流的,但查找了很多網(wǎng)站,發(fā)現(xiàn)沒有哪個網(wǎng)站系統(tǒng)地講述從零開始如何搭建前端的一個工具+框架自動化單元測試環(huán)境直至可以添加自文件可測試使用。所以,根據(jù)自己搭建的一些經(jīng)驗,我總結(jié)了一些步驟,搭建完成之后只需要保存一份,可以在其中添加不同的自定義js文件,都可以運行控制臺命令針對js文件進行單元測試。(我的環(huán)境搭建是在window系統(tǒng)下的)

一、測試框架/工具

  • 測試管理工具: karma
  • 測試框架: mocha/jasmine(本文講述的是mocha)
  • 斷言庫: chai
  • 測試瀏覽器: Phantomjs
  • 測試覆蓋率: karma-coverage

二、構(gòu)建基本的原生js單元測試

1. 創(chuàng)建項目的package.json
創(chuàng)建一個空項目文件夾,如mytest,在項目根目錄下執(zhí)行控制臺命令:npm init

npm init

之后按照提示進行創(chuàng)建基礎(chǔ)的package.json文件信息即可(我都是直接按Enter):

初始化package.json文件.png

2. 配置項目的package.json
分別執(zhí)行以下控制臺命令,將需要的工具/環(huán)境安裝到項目中,安裝完成后pakeage.json的devDependencies
中相應(yīng)改變出現(xiàn)相關(guān)安裝工具依賴。

執(zhí)行的控制臺命令:

npm install --save-dev karma

npm install --save-dev karma-mocha

npm install --save-dev karma-chai

npm install --save-dev karma-phantomjs-launcher

npm install --save-dev karma-coverage

npm install --save-dev mocha chai

所有工具/環(huán)境安裝成功后,package.json中是devDependencies這樣的:

"devDependencies": {
    "chai": "^3.5.0",
    "karma": "^1.4.1",
    "karma-chai": "^0.1.0",
    "karma-coverage": "^1.1.1",
    "karma-mocha": "^1.3.0",
    "karma-phantomjs-launcher": "^1.0.2",
    "mocha": "^3.2.0"
  }

3. 初始化Karma配置文件
在項目的根目錄運行karma init,初始化配置成功后會在根目錄下生成karma.conf.js文件。

karma init

按照截圖進行初始化配置:

karma初始化配置.png

表示配置使用mocha框架以及PhantomJS無頁面瀏覽器執(zhí)行前端js代碼的單元測試,配置需要被測試的代碼和測試代碼放在src/和test/文件夾中。

補充說明:
在項目下安裝完所有局部環(huán)境之后,根目錄下運行karma init命令行可能仍會報錯(karma init為無效命令等)
解決方案:在本電腦全局下安裝karma

npm i karma -g

4. 修改Karma基本配置
此時初始化的karma.conf.js只是最基本的karma配置,我們還需要手動修改一些地方。

  • 在其中的frameworks一項中增加chai:
frameworks: ['mocha','chai'],
  • 然后在config.set({})中添加:
plupins:[
        'karma-mocha',
        'karma-chai',
        'karma-phantomjs-launcher'
    ]

5. 針對覆蓋率修改Karma配置文件

  • 在preprocessors和reporters中添加:
preprocessors: {
        'src/*.js':['coverage']
    },

    reporters: ['progress','coverage'],
  • 然后在config.set({})中的plugins中添加:
plugins:[
        'karma-mocha',
        'karma-chai',
        'karma-phantomjs-launcher',
        'karma-coverage'
    ]

6. 開始編寫測試代碼
經(jīng)過上述步驟,基本上單元測試的工具/環(huán)境依賴已安裝完成,可以開始進行源代碼的編寫測試。
在上文的初始化Karma配置時,已經(jīng)告訴Karma,需要被測試的代碼和測試代碼放在src/和test/文件夾中,所以我們應(yīng)該在src/文件夾下提供要被測試的代碼,在test/文件夾下提供測試代碼:

在src/文件夾中新建index.js文件,在這個文件中添加三個非常簡單的函數(shù):

function isNum(num){
    return typeof num === "number"
}
function isString(str){
    return typeof str === "string"
}
function isLarge10(num){
    return num > 10;
}

然后在test/文件夾中新建index.test.js文件。通常,測試腳本與所要測試的源碼腳
本同名,但是后綴名為.test.js(表示測試)或者.spec.js(表示規(guī)格)。在該文件
中開始編寫測試代碼:

describe('index.js的測試',function(){
    it('1應(yīng)該是數(shù)字',function(){
        //expect(isNum(1)).to.be.true
        isNum(1).should.equal(true);
    })
    it('"1"應(yīng)該是字符',function(){
        //expect(isString("1")).to.be.true
        isString("1").should.equal(true);
    })
    it('11大于10',function(){
        //expect(isLarge10(11)).to.be.true
        isLarge10(11).should.equal(true);
    })
})

編寫測試文件時,describe、it都是由mocha提供的測試用api:

describe塊成為“測試套件”,表示一組相關(guān)的測試。他是一個函數(shù),第一個參數(shù)是測試套件的名稱,第二個參數(shù)是具體要執(zhí)行的測試函數(shù);

it塊稱為測試用例,表示一個單獨的測試,即測試的最小單位。他也是一個函數(shù),第一個參數(shù)表示測試用例的名稱,第二個參數(shù)表示具體要求執(zhí)行的斷言函數(shù);

7. 運行單元測試
被測試代碼和測試代碼編寫完畢后,在項目根目錄輸入:karma start

karma start

如果測試不通過,測試套件和測試用例的描述都會在命令行輸出,告訴你哪里測試失敗了。并且這時你修改任意代碼,單元測試便會在你保存后自動運行。
你的項目中便會多出一個coverage文件夾,文件夾中按照瀏覽器分了覆蓋率統(tǒng)計結(jié)果,我們使用的是PhantomJs,自然會有一個PhantomJs*文件夾,用瀏覽器打開index.html便可查看測試覆蓋率。

(補充說明:在我安裝局部單元測試環(huán)境依賴后,會存在執(zhí)行karma start命令時報錯的情況,所以可能新手朋友們在此步驟執(zhí)行時也會出現(xiàn)報錯,我分析是因為只有karma在全局安裝了,而其他的所有環(huán)境都是在項目目錄下進行局部安裝的,此時運行karma start使用全局環(huán)境karma去執(zhí)行命令就會發(fā)現(xiàn)全局中沒有其他模塊而導(dǎo)致報錯,基本上報錯類型包括提示mocha模塊出錯,加載不了coverage模塊,加載不了chai模塊等等,目前我找到的解決方案就是對于報錯的工具/環(huán)境進行全局執(zhí)行安裝,如全局安裝mocha執(zhí)行控制臺命令:

npm install mocha -g

解決思路就是缺少什么就對什么進行全局安裝。

好了,以上就是我自己在安裝使用前端單元測試工具和框架時一些步驟的簡單總結(jié),根據(jù)這個步驟可以基本創(chuàng)建一個原生js文件的測試環(huán)境包,之后只需要把要測試的js源文件放進src文件夾,把對應(yīng)源文件的自己根據(jù)chai斷言庫編寫的單元測試用例文件放進test文件夾中,再執(zhí)行karma start命令就可以測試自己的js邏輯。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,505評論 6 533
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 98,556評論 3 418
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 176,463評論 0 376
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經(jīng)常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,009評論 1 312
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 71,778評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 55,218評論 1 324
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,281評論 3 441
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 42,436評論 0 288
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 48,969評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 40,795評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,993評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,537評論 5 359
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 44,229評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,659評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,917評論 1 286
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,687評論 3 392
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 47,990評論 2 374

推薦閱讀更多精彩內(nèi)容