999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

基于Jest的前端單元測試分析

2022-02-18 09:42:38金凱周雨
科學與信息化 2022年3期
關鍵詞:程序環境

金凱 周雨

1. 冰辰網絡科技(上海)有限公司 上海 201600;2. 南通駿星信息科技有限公司 江蘇 南通 226500

引言

隨著前端技術的快速發展,多種前端框架占據了前端開發的主導地位,很多邏輯都可以在前端完成,客觀上對前端單元測試提出了新要求。前端單元測試是單元測試的一個分支,具有單元測試的共性,但又具有自己的一些獨特特點。Jest庫作為一個優秀的前端測試框架,較好地實現了前端單元測試。

1 前端單元測試的特點

單元測試[1]是針對程序單元(軟件設計的最小單位)來進行正確性檢驗的測試工作,程序單元是應用的最小可測試部件,通常是函數、過程、方法等。

單元測試框架有很多,但使用方法大同小異,測試時,首先建立一個虛擬上下文環境,用來模擬真實的業務場景,并注入一些公用的參數,隨后,對每個待測函數建立測試,用命令啟動這些測試,用斷言來輸出測試結果。

前端單元測試框架是單元測試框架的一種,使用方法與上文類似,但是,前端單元測試具有一些獨特的性質,首先,前端單元測試框架建立的上下文環境是一個虛擬的瀏覽器環境,在這個環境中可以對DOM結點進行操作。其次,前端單元測試框架可以測試以下幾種特殊的待測單元:①測試前端某個函數的輸出值是否符合斷言;②測試組件渲染出來的HTML頁面某個DOM結點是否符合斷言;③測試前端某個事件是否能被觸發;④測試后臺接口調用是否正確;⑤能進行快照測試,即將頁面的DOM結構存在文件里,下次測試時與其比較,可以實現測試自動化。

2 Jest單元測試框架簡介

Jest是一個Javascript測試框架,由Facebook開源,致力于簡化測試,降低前端測試成本。Jest主打開箱即用、快照功能、獨立并行測試以及良好的文檔和Api。其主要特色有如下幾點。

匹配器:通過匹配實現斷言。

AOP[2]機制:在測試函數啟動前和結束前提供鉤子函數創建測試用的上下文環境,如虛擬數據等。

Mock[3]函數:可以在虛擬上下文創建Mock函數,代替待測函數中的回調函數,用來測試事件的響應。

Jest可以實現對多種前端框架的測試,例如Vue、React等。

2.1 單元測試的方法論

單元測試的方法論有TDD(測試驅動開發)和BDD(行為驅動開發)兩種,TDD適合軟件編寫人員兼任測試人員的情況,要點是在開發之前,先寫測試,用測試來定義程序的預期行為,這樣,最后開發的程序一定是能通過測試的程序,也就是符合預期行為的程序。BDD適用于軟件編寫人員與測試人員不是同一人的情況,要點是開發人員要與客戶深入溝通,從具體的業務場景描述軟件行為。

2.2 單元測試的原則

2.2.1 單元測試應該無依賴和隔離。通常在單元測試中,把系統的依賴組件提取出來,用測試替身(Test Double)取而代之,把測試的目標放在測試單元本身而不是單元與組件的交互上。

2.2.2 單元測試是用例自動驗證的,不能依賴人工驗證。在真實的測試項目中,經常會出現程序每次運行時結果都不一樣的情況,例如:從后臺獲取的數據和時間有關,而具體的規律并不清楚,因此運行結果的正確性很難用程序判定,相反的,人工驗證倒是能夠判定運行結果的正確性。

2.3 使用Jest進行單元測試的一般流程

一個具體的Jest測試程序使用了3個重要函數:

describe:組織各個測試,在describe中調用了各個測試,并可對創建測試共有的上下文環境;

it:測試函數本身,在該函數中可以從上下文環境中獲取相關信息供測試使用;

expect,用來實現斷言,從而得到測試結果。

因此,Jest單元測試的一般流程即為:在describe函數里建立一個上下文環境,該環境竟包含了待測函數運行的必要信息,且所有信息都是確定的、可控的。在it函數里將待測函數引入環境使用expect函數設定測試參數和期望結果,建立測試。

3 Jest單元測試框架具體使用場景

Jest單元測試框架可以測試多種場景,下面舉例說明。

3.1 測試前端某個函數的輸出是否符合斷言

首先給出待測函數例子:

需要測試該函數的正確性。

函數很簡單,求兩個數的乘積,對這個函數,可以建立測試用來檢查結果是否正確:

這里用expect函數以函數f的返回值作為參數,toBe函數以期望的結果作為參數,如果兩者相等,則匹配成功。toBe就是一種匹配器,Jest提供了多種匹配器,可以實現不同的匹配方案。

3.2 測試渲染出來的HTML頁面的某個DOM結點是否符合斷言,以Vue為例

首先給出待測試的Vue組件CustomCard代碼:

需要測試出渲染出的頁面類為“dd”的標簽文本是否為“test”。

測試程序的主要代碼如下:

該測試程序使用find方法抓取DOM,參數可以是css選擇器,也可以是Vue組件的name

3.3 測試前端某個事件是否被觸發

首先給出待測試的Vue組件CustomCard代碼:

該組件中定義了一個事件action-btn:clicked,當點擊組件時觸發,現在要測試點擊組件時是否觸發了事件。

測試的主要代碼如下:

這里創建了一個mock函數 event = jest.fn()作為觸發事件后的回調函數,fn函數可以是空函數,僅用來測試是否被調用,也可以加入代碼邏輯,當事件被觸發后進行一些別的測試。

3.4 測試后臺接口是否正確

前端調用后臺接口是異步的,通常包裝成promise函數,因此測試用例也是異步的,下面是一個例子:

待測函數:

該函數向遠程服務器發送請求,請求參數為id=1,預期返回函數為字符串”ok”,則測試函數為:

可以看出,這個測試的寫法和測試普通函數類似,但是其中用到了async/await關鍵字,這兩個關鍵字在javascript中是處理異步的標準方案。

快照測試的流程是:當測試程序第一次啟動時,測試把組件渲染成html文件后存放在本地,稱為快照;測試程序再次啟動時,將新生成的html文件與快照文件比較,如果有差別,則測試失敗。由此實現了對UI組件沒有發生非預期的更改的測試。

猜你喜歡
程序環境
長期鍛煉創造體內抑癌環境
一種用于自主學習的虛擬仿真環境
孕期遠離容易致畸的環境
不能改變環境,那就改變心境
試論我國未決羈押程序的立法完善
人大建設(2019年12期)2019-05-21 02:55:44
環境
孕期遠離容易致畸的環境
失能的信仰——走向衰亡的民事訴訟程序
“程序猿”的生活什么樣
英國與歐盟正式啟動“離婚”程序程序
環球時報(2017-03-30)2017-03-30 06:44:45
主站蜘蛛池模板: 四虎在线高清无码| 老司机午夜精品视频你懂的| 欧美a在线| 91精品国产丝袜| 亚洲三级视频在线观看| 国产综合精品一区二区| 国产在线观看成人91| 亚洲狠狠婷婷综合久久久久| 欧美激情,国产精品| 成人国产一区二区三区| 暴力调教一区二区三区| 国产在线观看第二页| 91在线一9|永久视频在线| 亚洲狼网站狼狼鲁亚洲下载| 欧美激情视频一区| 99热这里只有免费国产精品 | 国产精品无码翘臀在线看纯欲| 中文字幕在线日本| 欧美一级黄色影院| 无码一区中文字幕| 日韩毛片基地| 一级毛片不卡片免费观看| 日本成人不卡视频| www.国产福利| 欧美yw精品日本国产精品| 国产丝袜第一页| 成人精品免费视频| jizz在线免费播放| 国产av无码日韩av无码网站| 性网站在线观看| 国产成人午夜福利免费无码r| 中文字幕免费在线视频| 亚洲欧美日韩成人在线| 中文字幕1区2区| 亚洲国产精品美女| 亚洲国产综合自在线另类| a级毛片在线免费| 九九热免费在线视频| 日本a∨在线观看| 五月激情婷婷综合| 黄色网在线| 日本福利视频网站| 欧美日韩激情在线| 91久久青青草原精品国产| 亚洲狼网站狼狼鲁亚洲下载| 欧美一级在线播放| 欧美a√在线| 亚洲精品制服丝袜二区| 久久国产精品无码hdav| 国产女人在线观看| 91小视频在线观看| 久久这里只有精品23| 国产中文一区二区苍井空| 免费不卡视频| 国产乱论视频| 国产99视频在线| 宅男噜噜噜66国产在线观看| 狠狠v日韩v欧美v| 国产精品久久久久久久久久98| 亚洲欧美另类色图| 国产美女久久久久不卡| 18禁影院亚洲专区| www.精品视频| 成人免费一级片| 91亚洲视频下载| 亚洲天堂网2014| 亚洲无码久久久久| 日韩免费中文字幕| 91久久偷偷做嫩草影院电| 97无码免费人妻超级碰碰碰| 亚洲最新在线| 香蕉久久国产超碰青草| www欧美在线观看| 日韩欧美在线观看| 国产高清在线精品一区二区三区| 国产精品成人啪精品视频| 色婷婷啪啪| 国内精品一区二区在线观看| 亚洲熟妇AV日韩熟妇在线| 国产精品久久久久久久久kt| jizz亚洲高清在线观看| 国内熟女少妇一线天|