前端單元測(cè)試學(xué)習(xí)小結(jié)

測(cè)試開發(fā)應(yīng)用方法
測(cè)試驅(qū)動(dòng)開發(fā)(英語(yǔ):Test-driven development,縮寫為 TDD)是一種軟件開發(fā)過(guò)程中的應(yīng)用方法,由極限編程中倡導(dǎo),以其倡導(dǎo)先寫測(cè)試程序,然后編碼實(shí)現(xiàn)其功能得名。
BDD行為驅(qū)動(dòng)開發(fā),即Behaviour Driven Development,是一種新的敏捷開發(fā)方法。它更趨向于需求,需要共同利益者的參與,強(qiáng)調(diào)用戶故事(User Story)和行為。

關(guān)于前端測(cè)試:

https://zhuanlan.zhihu.com/p/19590189
https://zhuanlan.zhihu.com/p/26050231

知乎:如何進(jìn)行前端自動(dòng)化測(cè)試?https://www.zhihu.com/question/29922082
  • 前端是一種特殊的GUI軟件
  • API unit測(cè)試方法論在測(cè)試GUI時(shí)并不能解決所有問(wèn)題。
  • 在前端很大部分代碼中,前端測(cè)試應(yīng)該向傳統(tǒng)GUI測(cè)試方法論需求解決方案。百度百科:https://baike.baidu.com/item/GUI%E8%BD%AF%E4%BB%B6%E6%B5%8B%E8%AF%95
  • GUI測(cè)試的成本非常高,前端這種特殊的GUI軟件,具有天生的快速迭代特征,這使得case維護(hù)成本也變得非常高,經(jīng)常跟不上迭代速度。
  • 一個(gè)標(biāo)準(zhǔn)的互聯(lián)網(wǎng)應(yīng)用產(chǎn)品的前端部分,粗略估計(jì)大概有20%的業(yè)務(wù)基礎(chǔ)代碼比較穩(wěn)定,比如通用組件、通用算法和數(shù)據(jù)模塊等,可以針對(duì)這些建立復(fù)雜一些的API和GUI測(cè)試用例來(lái)保證質(zhì)量。

所以一般情況下,前端測(cè)試分為單元測(cè)試和ui測(cè)試。

關(guān)于測(cè)試的一些知識(shí)點(diǎn)梳理:

單元測(cè)試:一段代碼(通常一個(gè)方法)調(diào)用另一段代碼,隨后檢驗(yàn)一些假設(shè)的正確性,如果假設(shè)的結(jié)果錯(cuò)了,單元測(cè)試注定會(huì)失敗,一個(gè)”單元“指的的一個(gè)方法或函數(shù)。

測(cè)試用例: 測(cè)試用例(Test Case)是為某個(gè)特殊目標(biāo)而編制的一組測(cè)試輸入、執(zhí)行條件以及預(yù)期結(jié)果,以便測(cè)試某個(gè)程序路徑或核實(shí)是否滿足某個(gè)特定需求。

測(cè)試套件: 通常把一組相關(guān)的測(cè)試稱為一個(gè)測(cè)試套件(test suite)。通過(guò)測(cè)試套件,將服務(wù)于同一個(gè)測(cè)試目的或同一運(yùn)行環(huán)境下的一系列測(cè)試用例有機(jī)的組合起來(lái)。測(cè)試套件是按照測(cè)試計(jì)劃所定義的各個(gè)階段的測(cè)試目標(biāo)決定的,即先有測(cè)試計(jì)劃,后面才有測(cè)試套件。

單元測(cè)試知識(shí)點(diǎn)參考:
https://zhuanlan.zhihu.com/p/27144800
https://zhuanlan.zhihu.com/p/27159015

Mocha

Mocha is a feature-rich JavaScript test framework running on Node.js and in the browser, making asynchronous testing simple and fun. Mocha tests run serially, allowing for flexible and accurate reporting, while mapping uncaught exceptions to the correct test cases. Hosted on GitHub.

教程
* 官方文檔 https://mochajs.org/
* 阮一峰mocha教程 http://www.ruanyifeng.com/blog/2015/12/a-mocha-tutorial-of-examples.html
* CNode https://cnodejs.org/topic/59e3873520a1a3647d72ac39
* 個(gè)人翻譯中文文檔 https://segmentfault.com/a/1190000011362879

命名: 測(cè)試腳本與所要測(cè)試的源碼腳本同名,但是后綴名為.test.js(表示測(cè)試)或者.spec.js(表示規(guī)格)。比如,add.js的測(cè)試腳本名字就是add.test.js

本身mocha是不包含斷言庫(kù)的,所以必須引入第三方斷言庫(kù),目前比較受歡迎的斷言庫(kù) 有 should.js、expect.js 、chai,具體的語(yǔ)法規(guī)則需要大家去查閱相關(guān)文檔。

chai

斷言庫(kù)可以理解為比較函數(shù),也就是斷言函數(shù)是否和預(yù)期一致,如果一致則表示測(cè)試通過(guò),如果不一致表示測(cè)試黑失敗,一個(gè)unit test里面可以包含多個(gè)斷言語(yǔ)句。

教程
* 官方文檔 http://www.chaijs.com/
* 中文api http://www.lxweimin.com/p/f200a75a15d2

karma

The main purpose of Karma is to make your test-driven development easy, fast, and fun.

* github https://github.com/karma-runner/karma
* karma介紹 http://taobaofed.org/blog/2016/01/08/karma-origin/

單元測(cè)試

結(jié)合我們目前的技術(shù)棧,本文主要介紹React和vue的單元測(cè)試。

React 單元測(cè)試

React的測(cè)試方法主要為將其中的計(jì)算邏輯抽離出來(lái)形成單元,再進(jìn)行測(cè)試。
測(cè)試模塊應(yīng)該盡量使你的應(yīng)用邏輯上保持獨(dú)立——模塊不依賴于 I/O 和 UI。

對(duì)于 Web 應(yīng)用來(lái)講,I/O 是什么?沒有文件和數(shù)據(jù)庫(kù)的操作?其實(shí)不僅僅是這樣,還有 Ajax 調(diào)用,本地存儲(chǔ),DOM 操作等,對(duì)我而言,任何和瀏覽器 API 有關(guān)的都是 I/O 操作。
參考: https://zhuanlan.zhihu.com/p/26266010

重要的是模塊的設(shè)計(jì),它暴露出來(lái)的函數(shù)非常簡(jiǎn)單——給一個(gè) state,得到下一個(gè) state。

在Redux中 每一個(gè)reducer都相當(dāng)于一個(gè)模塊,而且以Redux為狀態(tài)管理的React應(yīng)用當(dāng)中,reducer幾乎包括了我們所有前端業(yè)務(wù)的核心,它們?nèi)际?State, Action) => nextState形式的純函數(shù)。所以測(cè)好它就測(cè)了大半。

而在View層應(yīng)用當(dāng)中,我們一般只進(jìn)行stateless component的測(cè)試。

詳細(xì)請(qǐng)見: http://insights.thoughtworks.cn/react-and-unit-testing/

Vue 單元測(cè)試

在vue-cli生成項(xiàng)目之時(shí)選擇需要unit測(cè)試,并選擇karma mocha,項(xiàng)目?中就已經(jīng)有了test文件夾,其中基于的unit有了一定配置文件以及一個(gè)Hello World例子。

具體使用以及例子詳情參考:

官方用例:
https://cn.vuejs.org/v2/guide/unit-testing.html
https://github.com/vuejs/vue-test-utils-mocha-webpack-example

論壇文章:
https://zhuanlan.zhihu.com/p/26752090
https://www.zhihu.com/question/50566681/answer/267276949
https://zhuanlan.zhihu.com/p/27962486

使用建議:
https://engineering.doximity.com/articles/five-traps-to-avoid-while-unit-testing-vue-js

nodejs 測(cè)試

https://zhuanlan.zhihu.com/p/27986118
https://my.oschina.net/wangshijun/blog/871947

總結(jié)

任何測(cè)試都是針對(duì)項(xiàng)目減少錯(cuò)誤率,從而保證項(xiàng)目的效率以及可用性,所以在寫測(cè)試用例的時(shí)候更應(yīng)該結(jié)合項(xiàng)目現(xiàn)有需求而進(jìn)行。

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

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