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
主站蜘蛛池模板: 思思99思思久久最新精品| 亚洲最黄视频| 朝桐光一区二区| 亚洲精品色AV无码看| 国产精品无码AV片在线观看播放| 中文字幕 欧美日韩| 久久精品嫩草研究院| 国产香蕉在线视频| 十八禁美女裸体网站| 成人综合在线观看| 亚洲性网站| 国产幂在线无码精品| 国产不卡在线看| 色综合色国产热无码一| 日本免费一区视频| 欧美97色| 久青草免费视频| 香蕉99国内自产自拍视频| 精品亚洲欧美中文字幕在线看 | 国产福利小视频高清在线观看| 在线观看亚洲成人| 福利在线一区| 国产本道久久一区二区三区| 免费一级大毛片a一观看不卡| 久久人人97超碰人人澡爱香蕉 | 美女被操黄色视频网站| 国产91在线免费视频| 91精品国产自产在线观看| 国产精品久线在线观看| 国产凹凸视频在线观看| 久久无码av三级| 久久人妻xunleige无码| 亚洲三级成人| 国产人碰人摸人爱免费视频| 亚洲欧美另类久久久精品播放的| 国产十八禁在线观看免费| 欧美一级高清免费a| 人妻丰满熟妇啪啪| 中文纯内无码H| 国产日本欧美在线观看| 91香蕉国产亚洲一二三区| 久久a级片| 青青青草国产| 午夜精品福利影院| 亚洲av片在线免费观看| 日本午夜影院| 中文字幕在线免费看| 毛片网站观看| 婷婷在线网站| 国产一级在线播放| 欧美一级在线| 亚洲精品无码日韩国产不卡| 精品人妻系列无码专区久久| 91精品久久久久久无码人妻| 日韩欧美视频第一区在线观看| 在线免费观看a视频| 亚洲永久视频| 青青草国产一区二区三区| 精品欧美视频| 黄色网站不卡无码| 国产成人综合网在线观看| 国产白浆在线观看| 看国产毛片| 夜夜拍夜夜爽| 国产区人妖精品人妖精品视频| 亚洲成人精品在线| 国产成年女人特黄特色毛片免| 免费高清a毛片| 亚洲综合在线最大成人| 四虎精品国产AV二区| 亚洲人成网站在线观看播放不卡| 91香蕉视频下载网站| 丁香六月激情综合| 永久免费精品视频| 色精品视频| 国产精品夜夜嗨视频免费视频| 国产第四页| 亚洲欧美国产视频| 久久 午夜福利 张柏芝| 一级毛片免费的| 综合色88| 亚洲熟女中文字幕男人总站|