精品欧美一区二区三区在线观看 _久久久久国色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技術棧公眾號

好看的亚洲午夜视频在线| 在线看欧美视频| 国产91在线观看丝袜| 欧美精品videofree1080p| 国产免费一区二区三区最新6| 最新av在线播放| 国产99精品视频| 欧美一级电影久久| xxxxx99| 99久久999| 欧美日韩国产精品一区二区三区四区 | 在线中文字日产幕| 新片速递亚洲合集欧美合集| 中文字幕综合网| 国模精品娜娜一二三区| 波多野结衣影片| 综合五月婷婷| 亚洲欧洲第一视频| 少妇欧美激情一区二区三区| 午夜激情在线播放| 亚洲女子a中天字幕| 国产手机精品在线| 在线观看一二三区| 亚洲自啪免费| 久久成人在线视频| 女女互磨互喷水高潮les呻吟 | 99国产精品久久久久久久成人热| 中文字幕欧美精品日韩中文字幕| 无码人妻丰满熟妇啪啪网站| 91久久久久久白丝白浆欲热蜜臀| 亚洲成人自拍偷拍| 中文精品视频一区二区在线观看| 五月激情丁香婷婷| 国内精品在线播放| 日本午夜精品理论片a级appf发布| 亚洲av鲁丝一区二区三区| 国内精品久久久久久久影视简单| 精品久久久影院| 不卡中文字幕在线观看| 欧美精品高清| 欧美日韩午夜视频在线观看| 亚洲爆乳无码精品aaa片蜜桃| 欧美三级理伦电影| 久久亚洲一区二区三区四区| 国产精品免费在线| 国产精品嫩草影院精东| 日本成人在线不卡视频| 欧美中文字幕在线视频| 国产精久久久久久| 欧美有码视频| 久久精品国亚洲| 国产7777777| 欧洲福利电影| 亚洲天堂免费在线| 国产精品20p| 婷婷五月色综合香五月| 亚洲大胆美女视频| 男人添女人荫蒂国产| 国产精品亚洲一区二区在线观看 | 国产精品自产拍| 久久精品久久综合| 国产欧美一区二区三区久久| 波多野结衣在线电影| 丝袜亚洲另类欧美| 国产成人亚洲综合青青| 国产91国语对白在线| 日韩制服丝袜先锋影音| 国产精品久久久久久久久久ktv| 日本视频免费观看| 日欧美一区二区| 国产精品成人v| 日韩久久久久久久久久| 麻豆高清免费国产一区| 91美女福利视频高清| 国产ts人妖调教重口男| 高清国产午夜精品久久久久久| 动漫一区二区在线| 农村少妇久久久久久久| 久久色中文字幕| 日韩国产精品一区二区| 波多野结衣一区二区| 国产精品传媒入口麻豆| 一区二区三区四区免费观看| 天堂亚洲精品| 黑人巨大精品欧美一区免费视频| 免费观看成人在线视频| 国产精品伊人| 日韩视频免费直播| 北岛玲一区二区| 欧洲三级视频| 九九久久综合网站| 久久精品国产成人av| 免费观看日韩电影| 成人91视频| 青青草在线播放| 日韩一区欧美一区| 免费不卡av在线| 国产精品久久乐| 日韩欧美一区二区不卡| xxx在线播放| 一区二区三区国产精华| 欧美一级淫片丝袜脚交| 国产精品视频a| 成+人+亚洲+综合天堂| 午夜精品一区二区三区四区| 国产成人无吗| 色婷婷综合激情| 日韩成人av免费| 天天久久夜夜| 九九热这里只有精品免费看| 麻豆成人免费视频| 国产乱子伦一区二区三区国色天香| 国产一区自拍视频| 国产原创av在线| 亚洲午夜日本在线观看| 一本色道久久亚洲综合精品蜜桃| 大陆精大陆国产国语精品| 中文字幕av一区二区| 亚洲欧美在线视频免费| 精品一区二区成人精品| 青青草国产精品| 欧美女同一区| 欧美日韩国产不卡| 成年人免费观看视频网站| 欧美另类女人| 成人国产精品日本在线| 全色精品综合影院| 亚洲成人av在线电影| 天天综合成人网| 精品国产99| 26uuu亚洲伊人春色| 精品人妻伦一区二区三区久久| 国产日本一区二区| 国产精品久久中文字幕| 日韩三级av高清片| 日韩一区视频在线| 国产精品熟女视频| 久久综合久久鬼色中文字| 国产乱人伦精品一区二区三区| 高清亚洲高清| 亚洲性av在线| 蜜臀99久久精品久久久久小说| 成人激情免费电影网址| 亚洲国产一二三精品无码| 伊人国产精品| 久久精品国产v日韩v亚洲| 欧美成人一区二区视频| 国产日产亚洲精品系列| 国产精品乱码久久久久| 国产欧美日韩| 国产精品视频久久| eeuss影院www在线播放| 在线观看91视频| 天天干天天舔天天操| 日韩1区2区日韩1区2区| 性刺激综合网| jizzjizz少妇亚洲水多| 最近2019中文字幕mv免费看| 一级黄色在线观看| 欧美激情一区三区| 亚洲视频第二页| 99视频精品全部免费在线视频| 国产精品普通话| 欧美另类极品| 欧美一区二区三区在线看| 欧美视频www| 狠狠色丁香久久婷婷综| 手机看片日韩国产| 日韩精品成人在线观看| 久久免费国产精品1| 午夜福利视频一区二区| 日韩欧美在线国产| 91精品国自产在线| 国产呦精品一区二区三区网站| 穿情趣内衣被c到高潮视频| 日本免费一区二区视频| 午夜精品久久久久久久男人的天堂 | 伊人成人网在线看| 美乳视频一区二区| 影视一区二区三区| 超碰91人人草人人干| 亚洲精品国产精品乱码不卡| 狠狠干狠狠久久| 懂色av蜜桃av| 国产一区二区在线免费观看| 国产成人在线小视频| 自拍偷拍精品| 91免费看片在线| 高清在线视频不卡| 一本色道久久综合亚洲精品小说| 亚洲一区二区视频在线播放| 亚洲免费观看高清| 37p粉嫩大胆色噜噜噜| 日韩avvvv在线播放| 99久久免费观看| 精品在线99| 亚洲字幕一区二区| 国产精品专区免费| 精品国内自产拍在线观看| 黄色一级大片在线免费看国产| 色狠狠一区二区| 久久久久亚洲AV成人| 久久久美女毛片| 91大神免费观看| 玖玖视频精品| a级免费在线观看| 欧美色就是色| 国语精品中文字幕| 亚洲伊人精品酒店| 青青a在线精品免费观看| 二区三区在线观看| 亚洲午夜女主播在线直播| 国产自产一区二区| 欧美日韩aaa| 久久久黄色大片| 亚洲一区二区三区中文字幕 | 91av视频在线观看| 大地资源网3页在线观看| 亚洲人精选亚洲人成在线| 亚洲av综合色区无码一区爱av | 久久久久久这里只有精品| av电影在线网| 日韩电影视频免费| 黄色av一区二区三区| 91精品国产高清一区二区三区蜜臀 | 日韩一区二区在线| 美女主播视频一区| 牛牛精品成人免费视频| 51国偷自产一区二区三区 | 色婷婷久久久综合中文字幕| 久久综合成人网| 亚洲日本乱码在线观看| 婷婷丁香综合网| 国产日韩亚洲欧美综合| 国产国语性生话播放| 成人福利电影精品一区二区在线观看| 婷婷中文字幕在线观看| 久久精品国产77777蜜臀| 手机在线免费观看毛片| 另类激情亚洲| 欧美一级在线看| 亚洲高清免费| 亚洲熟妇无码一区二区三区| 欧美日一区二区三区在线观看国产免| 国产日韩视频在线播放| 日韩大片在线播放| 亚洲 日韩 国产第一区| 俺要去色综合狠狠| 欧美日韩中文国产一区发布| 亚洲欧美tv| 欧美日韩一区在线视频| 欧美热在线视频精品999| 蜜桃网站成人| 精品国产a一区二区三区v免费| 热舞福利精品大尺度视频| 最新亚洲精品| 久久亚洲高清| 狠狠色丁香婷婷综合影院| 日本一区高清不卡| 成人三级视频| 欧美日韩亚洲在线| 日本精品黄色| 97超碰免费观看| 欧美一区二区三区久久精品茉莉花| 波多野结衣激情| 午夜日韩电影| 91免费黄视频| 久久精品盗摄| 久久久久久蜜桃一区二区| 精品一区二区久久| 精人妻一区二区三区| av综合在线播放| 男女做爰猛烈刺激| 亚洲欧洲成人自拍| 国产在线视频二区| 色综合天天综合| 国产永久免费视频| 精品久久久久久久人人人人传媒| 欧美一级片免费| 亚洲人成网站777色婷婷| 丝袜美腿美女被狂躁在线观看| 欧美日韩第一页| 日本蜜桃在线观看视频| 国产欧美精品日韩| 国产精品极品| 涩涩涩999| 国内久久精品| 农村妇女精品一二区| 久久激情五月婷婷| 人妻换人妻a片爽麻豆| 日韩在线激情| 日韩欧美国产精品| 免费在线视频你懂得| 色老头一区二区三区| 性欧美猛交videos| 日本欧美国产在线| 蜜桃在线一区| 日本一区二区三区精品视频| 亚洲色图国产| 欧美日韩第二页| 国产精品影音先锋| 中文字幕免费视频| 亚洲一区二区在线播放相泽| 国产女优在线播放| 欧美精品一区二区三区很污很色的| 国产最新视频在线| 色在人av网站天堂精品| 姬川优奈av一区二区在线电影| 亚洲一区二区三区乱码aⅴ蜜桃女| 亚洲精品aaaaa| 丰满女人性猛交| 蜜桃av综合| 国产人妖在线观看| 亚洲国产精品精华液ab| 亚洲一区欧美在线| 在线不卡中文字幕| 经典三级在线| 亚洲91精品在线观看| 国产精品igao视频网网址不卡日韩| 美女主播视频一区| 亚洲国产精品一区| 青青草精品在线| 国产清纯白嫩初高生在线观看91 | 深夜福利在线视频| 久久国产精品久久久久久| 日本欧美日韩| 久久久综合亚洲91久久98| 国产精品九九| 在线视频日韩欧美| 国产精品视频看| 亚洲国产av一区二区三区| 亚洲精品福利在线观看| 四虎影视国产在线视频| 91九色综合久久| 色婷婷色综合| www.激情小说.com| 久久精品一区蜜桃臀影院| 国产成人在线视频观看| 欧美精品一区二区三区四区| 欧美极品少妇videossex| 91日韩久久| 小处雏高清一区二区三区| 日韩欧美国产片| 中文字幕第一区第二区| 日韩久久久久久久久久| 在线播放亚洲激情| 四虎4545www国产精品| 神马影院我不卡| 蜜臀久久久久久久| 综合 欧美 亚洲日本| 欧美日韩中文另类| 在线视频91p| 国产欧美久久久久久| 久久美女视频| 国产精品自在自线| 亚洲欧洲在线观看av| 国产精品一品二区三区的使用体验| 日韩在线免费视频观看| 久久99国产精品二区高清软件| 亚洲精品人成| 久久精品国产久精国产| 视频国产一区二区| 欧美一三区三区四区免费在线看| av在线影院| 国产经典一区二区三区| 一区二区日本视频| 精品无人区无码乱码毛片国产| 欧美性欧美巨大黑白大战| 又爽又大又黄a级毛片在线视频| 成人黄色在线免费| 欧美日本一区| 六十路息与子猛烈交尾| 日韩欧中文字幕| 91精品专区| 亚洲综合第一页| 99在线热播精品免费99热| 性欧美精品中出| 欧美一区二区三区四区久久| 国产探花在线观看| 欧美国产视频在线观看| 美美哒免费高清在线观看视频一区二区 | 无码一区二区三区| 最新69国产成人精品视频免费| 亚洲三级在线| 男人日女人视频网站| 久久久精品中文字幕麻豆发布| 中文字幕理论片| 色综合久久中文字幕综合网小说| 久久香蕉精品香蕉| 色婷婷狠狠18| 亚洲影视在线播放| 免费一级在线观看| 亚洲伊人一本大道中文字幕| 亚洲精品国产日韩| 欧美日韩国产黄色| 亚洲福利影片在线| 农村妇女一区二区| 黄色一级片播放| 中文字幕亚洲视频| 天天综合在线视频|