精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

“覆蓋率檢測”的實現原理,就這?

開發 前端
覆蓋率就是執行過的代碼占總代碼的比例,比如執行了多少行(Line),執行了多少個分支(Branch),執行了多少個函數(Function),執行了多少條語句(Statement)。

[[429164]]

覆蓋率檢測是用來判斷單測完整性的,jest 和 karma 都提供了這種功能:

 

覆蓋率就是執行過的代碼占總代碼的比例,比如執行了多少行(Line),執行了多少個分支(Branch),執行了多少個函數(Function),執行了多少條語句(Statement)。

用它比上總的數量就是覆蓋率,分為行覆蓋率、分支覆蓋率、函數覆蓋率、語句覆蓋率等。

看起來是不是很神奇,執行完一遍就能知道覆蓋到了哪些代碼,其實實現原理比較簡單,相信看完這篇文章,你會有“就這?”的感覺。

原理探究

jest 和 karama 都是基于 istanbul 做的覆蓋率檢測,我們來探究下 istanbul 的實現原理。

測試代碼如下: 

我們執行 istanbul 的 instrument 命令:

  1. npx istanbul instrument ./test.js -o ./out.js 

instrument 是指函數插樁,也就是透明的給函數添加一些代碼。

為什么要插樁呢?看完生成的代碼你就明白了。

我們來格式化一下,把變量名替換下。

這就是轉換后的代碼,在每一個 statement,每一個 function、每一個 branch 都做了計數,分別是 s、f、b 屬性。

上面還有一段代碼:

初始化了全局變量 AAA,記錄了這些信息:

  • path:路徑
  • s:statement 數
  • b:branch 數
  • f:function 數
  • fnMap:function 的開始結束位置信息
  • statementMap:statement 的開始結束位置信息
  • branchMap:branch 的開始結束位置信息

看到這里我們大概就能搞懂覆蓋率的原理了,就是對每個 statement、function、branch 都插入一段計數代碼,記錄在一個全局對象中。

為了不和別的全局變量沖突,這個對象的名字是隨機生成的,比如 __cov_5ZoEXQ_Hbo27uXArxdm2oA,這里為了簡化改為了 AAA。

我們搞明白了覆蓋率就是靠插入計數代碼,那怎么做的插樁呢?

函數插樁

函數插樁是基于 AST,找到 statement、function、branch 的 AST,在前面插入插樁代碼的 AST。

istanbul 確實也是這么做的。

下面是 istanbul 的源碼(只看紅線標出的位置就行):

就是通過 esprima(js parser)來把代碼 parse 成 AST,然后對 AST 進行插樁。

插樁代碼分為兩部分,一部分是初始化全局對象的代碼,一部分是每個分支、語句、函數的計數代碼。

我們分別來看下:

初始化全局對象的代碼插樁

istanbul 初始化了全局的 coverState 對象用于統計:

做插樁的時候會記錄信息到這個 coverState 中:

最后把 coverState 變成字符串加入到代碼里:

那具體的分支、語句、函數的 AST 是怎么插樁的?

分支、語句、函數的插樁

對不同 AST 的插樁,就是遍歷過程中根據類型做不同的處理:

然后,具體的插樁就是在前面插入一段 AST:

statement 插樁:

function 插樁:

看到這里,我們就知道了函數插樁的實現原理,就是遍歷 AST,在不同的位置插入計數代碼的 AST 就可以了。

但是有的同學可能會說了,平時我也沒手動生成插樁后的代碼啊?用 jest --coverage 跑測試用例自動就做了計數,然后給出覆蓋率數據了。

istanbul 是怎么做到透明的插樁的呢?

require hook 實現透明無感知的函數插樁

看過之前一篇 require hook 的魔術那篇文章的小伙伴知道,nodejs 的模塊加載是分為 load、extension['.js']、compile 這幾步的。

我們只需要重寫 extension['.js'] 這一步,就能做到透明的代碼轉換。

istanbul 也是這么做的:

它就是通過修改了 extension['.js'] 方法,在這里面做了函數插樁,之后執行的代碼就是轉換過后的了,開發者根本感知不到。

總結

jest 和 karma 都基于 istanbul 實現了覆蓋率檢測。覆蓋率統計的原理就是函數插樁,基于 AST 在代碼的 statement、function、branch 處插入計數代碼,同時通過 require hook 實現了透明的轉換。這樣代碼一執行就能拿到統計數據,自然就可以算出覆蓋率了。

看完之后,是不是覺得:

覆蓋率檢測的實現,就這?

 

責任編輯:姜華 來源: 神光的編程秘籍
相關推薦

2022-05-31 09:01:18

SwiftApp 項目

2024-04-01 08:26:30

單測覆蓋率字節碼

2019-09-25 09:20:41

谷歌代碼開發者

2022-03-29 11:32:32

單元測試覆蓋率框架

2011-11-01 10:10:48

ScriptCover

2023-10-27 08:49:00

JCovOpenJDK

2022-10-21 15:29:32

5G網絡

2021-12-25 22:30:27

Chrome DevTJavaScript調試工具

2012-04-11 11:21:57

ibmdw

2022-08-25 06:27:39

vivoJaCoCo代碼覆蓋率

2019-09-30 10:27:52

變異測試評估

2018-02-27 14:50:20

大數據公廁城市

2024-06-14 12:04:33

2012-09-21 10:30:56

Linux項目代碼覆蓋率

2011-04-25 09:49:20

代碼測試

2021-04-22 06:13:41

Express 中間件原理中間件函數

2016-01-13 10:14:15

WebPHP函數覆蓋

2015-11-09 17:56:57

WebPHP函數覆蓋

2022-07-22 07:38:31

監控系統

2022-05-13 09:40:51

代碼可行應用性能
點贊
收藏

51CTO技術棧公眾號

成人免费xxxxx在线视频| 久久资源av| 精品无码m3u8在线观看| 日韩成人av在线资源| 色哟哟一区二区在线观看| 视频二区一区| 亚洲男女视频在线观看| 午夜在线精品偷拍| 久久精品99久久久香蕉| 成人在线电影网站| 少妇精品视频在线观看| 亚洲成av人片在www色猫咪| 日本午夜精品一区二区| 国产浮力第一页| 久久亚洲美女| 欧美日本高清视频| 蜜桃av免费观看| 老司机在线精品视频| 欧美日韩在线观看一区二区| 成人午夜精品久久久久久久蜜臀| 成a人v在线播放| 成人禁用看黄a在线| 国产精品香蕉国产| 日韩av大片在线观看| 久久久9色精品国产一区二区三区| 欧美精品一区二区三区在线| 亚洲精品第三页| 成人影院入口| 精品久久久久久国产91| 男人j进女人j| 欧美性猛交xxx乱大交3蜜桃| 久久综合色婷婷| 国产精品久久久久久免费观看| 亚洲一区二区天堂| 视频一区视频二区中文字幕| 久久免费观看视频| 久久久一区二区三区四区| 国产精品久久久久久久久久10秀 | www.精品久久| 日本不卡高清视频| 欧洲成人在线视频| 日韩精品成人一区| 国产精品大片| 欧美成人亚洲成人日韩成人| 极品色av影院| 99久久婷婷国产综合精品电影√| 亚洲天堂男人天堂女人天堂| 国精产品一区一区三区免费视频| 卡通动漫国产精品| 欧美精品一区二区在线播放| 欧美午夜精品一区二区| 麻豆精品在线| 日韩精品一区二区三区在线| 午夜影院免费版| 欧美一级片网址| 日韩一区二区免费电影| 最好看的中文字幕| 一本色道69色精品综合久久| 日韩一级成人av| 国产人妻精品午夜福利免费| 国产精品对白| 日韩精品高清视频| 国产美女免费无遮挡| 久久不见久久见免费视频7| 亚洲天堂第一页| 蜜桃传媒一区二区亚洲| 青青草91久久久久久久久| 在线成人免费网站| 国产传媒免费在线观看| 久久久久国产精品| 欧美另类在线观看| 日本一本高清视频| 国产农村妇女精品一二区| 啪一啪鲁一鲁2019在线视频| 国产精品无码粉嫩小泬| 久久国产夜色精品鲁鲁99| 成人在线中文字幕| 亚洲第一页视频| 99re热这里只有精品免费视频| 久久99蜜桃综合影院免费观看| 日韩porn| 国产精品高清亚洲| 日韩国产成人无码av毛片| 欧产日产国产精品视频| 国产精品高潮呻吟久久久久| 久久久国产精华| 亚洲一二区在线| 在线黄色网页| 色综合色综合色综合色综合色综合| 欧美 激情 在线| 国产精品伦一区二区| 欧美人牲a欧美精品| 91香蕉视频免费看| 欧美自拍一区| 精品久久久999| 国产精品自拍视频一区| 全国精品久久少妇| 99电影在线观看| 国产在线视频资源| 亚洲激情六月丁香| 日韩精品一区中文字幕| 国产精品一站二站| 亚洲欧美日韩第一区| 一级片一级片一级片| 在线亚洲激情| 成人免费大片黄在线播放| 天堂av中文字幕| 中文字幕在线一区二区三区| 国产精品免费入口| 欧洲精品99毛片免费高清观看| 国产视频精品久久久| 久草视频手机在线| 日韩在线观看一区二区| 国产精品免费一区二区三区观看| www日韩tube| 五月天中文字幕一区二区| 高清一区在线观看| 午夜欧洲一区| 欧美激情视频网| 国产三级第一页| 国产亚洲一区二区三区在线观看 | 91超碰在线免费观看| 久久久久久久久久久久久9999| 亚洲黄色在线观看视频| 国产精品三级电影| 欧美日本视频在线观看| 国产一区 二区| 这里只有视频精品| 欧美a视频在线观看| 懂色av噜噜一区二区三区av| 国产精品av免费| 嫩草伊人久久精品少妇av杨幂| 亚洲第一免费网站| 久久精品www人人爽人人| 久久精品久久99精品久久| 日韩av电影免费在线| 天堂中文最新版在线中文| 日韩视频不卡中文| 一区视频免费观看| 国内成人精品2018免费看| 日本不卡免费新一二三区| 欧美xxxhd| 亚洲国产日韩精品在线| 久久综合亚洲色hezyo国产| 国产麻豆一精品一av一免费 | 亚洲一区二区偷拍| 久久中文字幕av一区二区不卡| 国产98色在线| 日本高清中文字幕二区在线| 偷拍日韩校园综合在线| 在线天堂www在线国语对白| 黄色av日韩| 国产丝袜不卡| 亚洲精品福利电影| 亚洲欧美国产精品va在线观看| 黄网在线观看视频| 久久综合色天天久久综合图片| 成人午夜视频免费在线观看| 久久av免费看| 国产精品三级美女白浆呻吟| 在线观看黄av| 在线成人av网站| 青娱乐在线视频免费观看| 欧美日韩123区| 欧美日韩亚州综合| 久久成人小视频| 国产一区二区三区久久久| 久久久无码中文字幕久...| 亚洲3区在线| 久久久天堂国产精品女人| 性xxxxbbbb| 在线视频一区二区免费| 在线视频这里只有精品| 精品一区二区久久久| 久久免费一级片| 动漫视频在线一区| 日本不卡高字幕在线2019| jizz在线免费观看| 日韩精品一区二区在线| 欧美一区二区三区四| 国产农村妇女精品| 丰满人妻一区二区三区大胸| 国产日本精品| 亚洲精品中文字幕乱码三区不卡 | 俄罗斯精品一区二区| 激情视频网站在线播放色| 国产亚洲精品久久久久久| 国产三级三级在线观看| 疯狂做受xxxx欧美肥白少妇| 毛片aaaaaa| 成人av在线观| 性chinese极品按摩| 女同性一区二区三区人了人一| 国产伦精品一区二区三区照片91 | 欧美日韩高清一区| 国产午夜精品一区二区理论影院| 国产亚洲成av人在线观看导航| 欧美视频国产视频| 亚洲欧美日韩国产| 中文字幕の友人北条麻妃| 国产亚洲第一伦理第一区| 亚洲一区制服诱惑| 日韩高清在线| 99久久国产综合精品女不卡| 成人免费网站在线看| 日韩伦理在线一区| 久久天天躁日日躁| 国产中文在线视频| 精品国产乱码久久久久久图片 | 欧美不卡视频一区| 正在播放木下凛凛xv99| 亚洲一级二级三级| 亚洲熟女少妇一区二区| 91免费观看国产| 色哟哟在线观看视频| 日本91福利区| 国产精品999视频| 中文乱码免费一区二区三区下载| 欧美精品亚洲| 另类尿喷潮videofree| 成人美女免费网站视频| 久久亚洲精品中文字幕| 38少妇精品导航| 国产盗摄精品一区二区酒店| 久久在精品线影院精品国产| 国产黄色片在线播放| 亚洲精品456在线播放狼人| 亚洲精品18p| 欧美一区二区在线视频| 国产一区二区在线观看免费视频| 成人免费黄色网页| 精品少妇一区二区三区在线播放| 一本久道久久综合无码中文| 色999日韩国产欧美一区二区| 日韩成人高清视频| 亚洲国产精品一区二区久久恐怖片 | 日韩小视频网址| 国产在线观看精品一区| 日韩av中文字幕在线| 国产综合视频在线| 欧美成人综合网站| a级片在线视频| 91精品国产丝袜白色高跟鞋| 国产精品久久影视| 欧美日韩国产一二三| 老熟妇一区二区三区啪啪| 欧美综合天天夜夜久久| 国产亚洲久一区二区| 91精品福利视频| 69视频免费看| 91黄色免费观看| 亚洲性猛交富婆| 欧美日本一区二区在线观看| 中文字幕无码乱码人妻日韩精品| 在线观看视频欧美| 中文字幕a级片| 欧美日韩精品电影| 国产精品国产精品国产专区| 91精品国产91久久久久久最新毛片| 国产又爽又黄免费软件| 欧美一区二区三区四区高清| 99riav国产| 亚洲电影在线观看| 欧美美乳在线| 中文字幕亚洲一区| а天堂中文在线官网| 欧美黄色www| 蜜桃视频m3u8在线观看| 国产97在线|亚洲| 欧美一级免费| 亚洲专区国产精品| 国产伦精品一区二区三区在线播放 | 在线精品高清中文字幕| 在线观看免费黄色| 九色精品美女在线| 午夜激情电影在线播放| 国产成人精品国内自产拍免费看| 国产91精品在线| 99在线国产| 久久97视频| 中国人体摄影一区二区三区| 欧美日韩精品免费观看视频完整| 欧美日韩二三区| 蜜桃91丨九色丨蝌蚪91桃色| 手机看片国产精品| 久久综合久久久久88| 自拍偷拍第9页| 亚洲一级电影视频| 中文字幕av第一页| 欧美成人aa大片| 你懂的视频在线| 久久香蕉国产线看观看网| 九色porny丨国产首页在线| 国产精品久久不能| 激情亚洲另类图片区小说区| 午夜精品在线播放| 亚洲男人天堂av网| 美日韩免费视频| 视频在线亚洲| 日本成人三级电影网站| 你懂的视频一区二区| 男人舔女人下面高潮视频| 国产精品一级片在线观看| 中文字幕丰满乱子伦无码专区| 中文字幕亚洲一区二区va在线| 中文字幕一区二区三区精品 | 欧美成人免费在线观看视频| 免费观看在线综合色| xfplay5566色资源网站| 亚洲欧洲成人av每日更新| 成人免费看片98欧美| 欧美一区二区精品| 国产在线观看免费| 97在线看免费观看视频在线观看| 99riav视频一区二区| 狠狠色伊人亚洲综合网站色| 亚洲久久久久| 在线观看的毛片| 久久综合九色综合欧美就去吻| 男女性高潮免费网站| 欧洲中文字幕精品| 天堂a√在线| 欧美精品video| 日韩三级久久| 国产女人18毛片| 麻豆一区二区99久久久久| 欧美亚一区二区三区| 亚洲国产综合人成综合网站| 国产精品久久久久久久久久久久久久久久 | 欧美日韩伦理在线免费| 草草久久久无码国产专区| 成人午夜激情片| 免费麻豆国产一区二区三区四区| 欧美老人xxxx18| 婷婷成人激情| 国产欧美日韩高清| 日本不卡免费一区| www.xxx亚洲| 欧美国产欧美亚州国产日韩mv天天看完整 | 1024精品久久久久久久久| a在线观看免费视频| 欧美激情一区不卡| 91porny九色| 中文字幕在线观看不卡| 免费观看中文字幕| 免费视频一区| 久久国产精品无码一级毛片| 午夜不卡在线视频| 日韩大胆人体| 国产精品扒开腿做爽爽爽男男 | 亚洲国产欧美不卡在线观看| 日韩精品亚洲专区| 国产又粗又猛又爽又黄av| 欧美亚洲国产一区二区三区va | 国产欧美熟妇另类久久久 | 另类专区欧美蜜桃臀第一页| 亚洲欧美va天堂人熟伦| 欧美少妇xxx| 黄色在线免费| 北条麻妃高清一区| 激情久久久久| 久久久久久久久免费看无码| 色综合天天天天做夜夜夜夜做| 国产日本在线| 成人信息集中地欧美| 欧美成人嫩草网站| 欧美大喷水吹潮合集在线观看| 欧美色播在线播放| yourporn在线观看视频| 亚洲一区二区三区四区视频| 国产综合激情| 精品国产av色一区二区深夜久久| 日韩欧美精品中文字幕| 91精品专区| 国产91社区| 视频一区在线视频| 顶臀精品视频www| 亚洲国产精品网站| 高清成人在线| 日韩一二区视频| 93久久精品日日躁夜夜躁欧美| 懂色av蜜臀av粉嫩av分享吧最新章节| 社区色欧美激情 | 欧美国产亚洲精品| 日韩精品视频久久| 国产精品国产三级国产有无不卡 | 密臀av在线播放| 国产日韩精品电影| 国产精品大片| 欧美人妻一区二区三区| 337p亚洲精品色噜噜狠狠| 成人免费观看在线观看| 亚洲一区二区三区精品在线观看 | 91福利在线视频| 国产精品久久一区二区三区| 石原莉奈在线亚洲二区| 久热这里有精品| 亚洲系列中文字幕| av日韩在线播放| 天堂网在线免费观看|