前端單元測試筆記 —— 工具篇


准備着手前端組件庫的搭建,要求編寫單元測試,前端的單元測試完全沒接觸過,所以從頭學習了下,找了不少資料,所以想記錄下。

前端框架用的vue,現在搭建項目都很方便,不管哪個框架都會有腳手架,vue的腳手架是vue-cli,單元測試和e2e測試在搭建的時候選了就會自動下載相關的包,所以需要依賴哪些包,就先不研究了,直接基於腳手架的來處理。

vue-cli init出來的項目,分prod,dev,testing,而testing是直接選用dev的相關配置,而實際公司的運用場景會分更多的環境:dev,test,integration,prod 即開發環境,測試環境,集成環境(這是個模擬仿真生產的環境,除了數據不連通,理論上來說,所有的配置要和生產一致,有些公司可能就三種環境,測試和集成合並成一個),生產環境,基本上就會有開發,測試,生產三種環境。

而腳手架中搭出來的testing,其實是針對開發跑測試的一個環境,其實跟上面這三者不屬於一個范疇,而在webpack的配置中,我們針對上面的三種環境會對腳手架搭出來的配置文件稍作修改:

為了兼容各個環境,所以將這里換成是讀取環境變量,而在執行代碼打包時,在命令文件里都有對process.env.NODE_ENV,比如生產的npm run build 的build.js文件中:

然后執行單元測試的時候配置文件中並沒有這個變量的賦值,所以會導致命令報錯:

現在我的解決方案是在unit這個命令下,賦值環境變量:

 

這些算是准備工作,webpack的基礎配置方式,可以多看看webpack的官網。

接着是單元測試的部分,腳手架中用的測試工具是karma,測試庫是mocha,斷言庫是:chai

腳手架已經集成好,但是腳手架里的這三個工具的基本用法還是需要了解一下,所以對應的相關教程(其實都是官網,對應的api當工具書來用):

1karmahttps://karma-runner.github.io/2.0/config/configuration-file.html(配置相關)

2mochahttp://www.ruanyifeng.com/blog/2015/12/a-mocha-tutorial-of-examples.html

3chaihttps://www.jianshu.com/p/f200a75a15d2

執行完寫的測試用例,會生成一份測試報告,但生成的測試報告上出現的幾個名詞完全沒概念,statements和function 還能從字面上理解,branches就完全沒頭緒了,lines又讓人困惑,lines和statements有啥區別呢?

為此差了些資料,先是找到下面這篇文章:

http://web.jobbole.com/84601/

這篇文章開頭就解釋了下這幾個名詞:

代碼覆蓋率

測試的時候,我們常常關心,是否所有代碼都測試到了。這個指標就叫做“代碼覆蓋率”(code coverage),它有四個測量維度。

  • 行覆蓋率(line coverage):是否每一行都執行了?
  • 函數覆蓋率(function coverage):是否每個函數都調用了?
  • 分支覆蓋率(branch coverage):是否每個 if 代碼塊都執行了?
  • 語句覆蓋率(statement coverage):是否每個語句都執行了?

 

但文中對行覆蓋率和語句覆蓋率沒做特別的解釋,於是繼續挖,又找到這篇博文:http://blog.hypers.io/2017/08/20/test-coverage/ 在這篇中涉及到的概念更多了,還有生成語法樹的概念

在查覆蓋率概念的時候,在這篇中又發現了幾個名詞:

https://baike.baidu.com/item/%E4%BB%A3%E7%A0%81%E8%A6%86%E7%9B%96%E6%B5%8B%E8%AF%95/8642107?fr=aladdin

判斷覆蓋率,條件覆蓋率,路徑覆蓋率,看概念是更困惑了~

對於覆蓋率的這些困惑看來只能稍后再結合實例來理解了。

 

前端的很多測試是需要基於瀏覽器的,karma中默認的是phantomjs,如果想要啟用其他瀏覽器,可以按照下面這個url里的教程進行相應處理 

http://karma-runner.github.io/0.13/config/browsers.html

 

這些都是為寫用例的准備工作,下一篇用實例理解下這些概念。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM