日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

代码覆盖率工具 Istanbul 入门教程

發布時間:2025/3/21 编程问答 18 豆豆
生活随笔 收集整理的這篇文章主要介紹了 代码覆盖率工具 Istanbul 入门教程 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

測試的時候,我們常常關心,是否所有代碼都測試到了。

這個指標就叫做"代碼覆蓋率"(code coverage)。它有四個測量維度。

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

Istanbul?是 JavaScript 程序的代碼覆蓋率工具,本文介紹它的用法。

這個軟件以土耳其最大城市伊斯坦布爾命名,因為土耳其地毯世界聞名,而地毯是用來覆蓋的。

一、安裝

Istanbul 是一個 npm 模塊,安裝非常簡單,就一行命令。

$ npm install -g istanbul

二、覆蓋率測試

來看一個例子,怎么使用 Istanbul 。下面是腳本文件 simple.js 。

var a = 1; var b = 1; if ((a + b) > 2) {console.log('more than two'); }

使用?istanbul cover?命令,就能得到覆蓋率。

$ istanbul cover simple.js===== Coverage summary ===== Statements : 75% ( 3/4 ) Branches : 50% ( 1/2 ) Functions : 100% ( 0/0 ) Lines : 75% ( 3/4 ) =============================

返回結果顯示,simple.js 有4個語句(statement),執行了3個;有2個分支(branch),執行了1個;有0個函數,調用了0個;有4行代碼,執行了3行。

這條命令同時還生成了一個 coverage 子目錄,其中的 coverage.json 文件包含覆蓋率的原始數據,coverage/lcov-report 是可以在瀏覽器打開的覆蓋率報告,其中有詳細信息,到底哪些代碼沒有覆蓋到。

三、覆蓋率門檻

完美的覆蓋率當然是 100%,但是現實中很難達到。需要有一個門檻,衡量覆蓋率是否達標。

istanbul check-coverage?命令用來設置門檻,同時檢查當前代碼是否達標。

$ istanbul check-coverage --statement 90ERROR: Coverage for statements (75%) does not meet global threshold (90%)

上面命令設置語句覆蓋率的門檻是 90% ,結果就報錯了,因為實際覆蓋率只有75%。

除了百分比門檻,我們還可以設置絕對值門檻,比如只允許有一個語句沒有被覆蓋到。

$ istanbul check-coverage --statement -1

上面命令使用負數,表示絕對值門檻。這樣一來,上面的例子就通過了覆蓋率測試,不會再報錯了。

百分比門檻和絕對值門檻,可以結合使用。

$ istanbul check-coverage --statement -5 --branch -3 --function 100

上面命令設置了3個覆蓋率門檻:5個語句、3個 if 代碼塊、100%的函數。注意,這三個門檻是"與"(and)的關系,只要有一個沒有達標,就會報錯。

四、與測試框架的結合

實際開發時,istanbul 總是與測試框架結合使用,下面以常用的?Mocha 框架為例。

sqrt.js 是一個計算平方根的腳本。

var My = {sqrt: function(x) {if (x < 0) throw new Error("負值沒有平方根");return Math.exp(Math.log(x)/2);} };module.exports = My;

它的測試腳本 test.sqrt.js 放在 test 子目錄。

var chai = require('chai'); var expect = chai.expect; var My = require('../sqrt.js');describe("sqrt", function() {it("4的平方根應該等于2", function() {expect(My.sqrt(4)).to.equal(2);});it("參數為負值時應該報錯", function() {expect(function(){ My.sqrt(-1); }).to.throw("負值沒有平方根");});});

然后,執行下面的命令得到代碼覆蓋率。

$ istanbul cover _mocha // or $ istanbul cover _mocha test/test.sqrt.jssqrt? 4的平方根應該等于2 ? 參數為負值時應該報錯 2 passing (7ms)===== Coverage summary ===== Statements : 100% ( 5/5 ) Branches : 100% ( 2/2 ) Functions : 100% ( 1/1 ) Lines : 100% ( 4/4 ) =============================

上面命令中,istanbul cover 命令后面跟的是 _mocha 命令,前面的下劃線是不能省略的。

因為,mocha 和 _mocha 是兩個不同的命令,前者會新建一個進程執行測試,而后者是在當前進程(即 istanbul 所在的進程)執行測試,只有這樣, istanbul 才會捕捉到覆蓋率數據。其他測試框架也是如此,必須在同一個進程執行測試。

如果要向 mocha 傳入參數,可以寫成下面的樣子。

$ istanbul cover _mocha -- tests/test.sqrt.js -R spec

上面命令中,兩根連詞線后面的部分,都會被當作參數傳入 Mocha 。如果不加那兩根連詞線,它們就會被當作 istanbul 的參數(參考鏈接1,2)。

如果想在瀏覽器運行 Istanbul ,可以參考這篇文章。

五、忽略某些代碼

istanbul 提供注釋語法,允許某些代碼不計入覆蓋率。

var object = parameter || /* istanbul ignore next */ {};

上面代碼是為 object 指定默認值(一個空對象)。如果由于種種原因,沒有為 object 為空對象的情況寫測試,可以用注釋,不將這種情況計入覆蓋率。注意,注釋要寫在"或"運算符的后面。

/* istanbul ignore if */ if (hardToReproduceError)) {return callback(hardToReproduceError); }

上面代碼的 if 語句塊,在計算覆蓋率的時候會被忽略。

(完)


出處:http://www.ruanyifeng.com/blog/2015/06/istanbul.html

總結

以上是生活随笔為你收集整理的代码覆盖率工具 Istanbul 入门教程的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 高清欧美性猛交 | 日本高清www免费视频 | 男男做爰猛烈叫床爽爽小说 | jizz国产视频 | 国产成人综合在线 | 老湿机69福利区午夜x片 | 日日碰碰| 日韩伦理一区二区三区 | 日本一区二区三区在线观看 | 久久靖品 | 国产欧美在线精品日韩 | 亚洲最大成人网站 | 日本一区精品视频 | 久久精品国产亚洲av嫖农村妇女 | 免费激情网 | 国产精品免费av一区二区三区 | 久久综合色网 | 裸体按摩www性xxxcom | 手机av网 | 色图在线观看 | 在线看a级片 | 性欧美又大又长又硬 | 上原亚衣av一区二区三区 | 高潮流白浆在线观看 | 狠狠入 | 国产成人激情视频 | 午夜a级片| 少妇毛片一区二区三区 | 夜夜爽av福利精品导航 | 69精品丰满人妻无码视频a片 | 自拍视频第一页 | 在线观看黄色免费视频 | 宅男噜噜噜 | 波多野结衣一区二区三区高清av | 神马午夜场 | 网友自拍第一页 | 在线观看免费毛片 | 99久久久精品 | 日韩精品一区二区三区视频在线观看 | 97福利网 | 狠狠2020| 都市激情亚洲色图 | 爽妇综合网 | 日本免费一区二区三区四区五六区 | 亚洲国产精品成人 | 亚洲欧美日韩网站 | 婷婷六月在线 | 丁香av | 青青草视频国产 | 五月网婷婷 | 国产真实老熟女无套内射 | 欧美成人做爰猛烈床戏 | 国产精品无码久久久久久电影 | 人人爱人人| 麻豆成人精品国产免费 | 亚洲精品自拍视频 | 久久888| 欧美肉丝袜videos办公室 | 又黄又爽视频在线观看 | 国产精品久久av无码一区二区 | 清纯唯美亚洲 | 亚洲精品乱码久久久久久写真 | 91久久精品国产91性色69 | 精品少妇白浆小泬60P | 无毛av| 天天干免费视频 | 中国女人内96xxxxx | 亚洲av成人精品一区二区三区在线播放 | gai免费观看网站外网 | 黄色中文字幕在线观看 | 亚洲欧美日韩在线不卡 | av鲁丝一区鲁丝二区鲁丝三区 | 亚洲国产高清国产精品 | 欧美透逼视频 | 午夜秋霞网 | 久久观看| 91成人短视频 | 九九天堂 | 黄色av影院| 美女福利片 | 一级黄色伦理片 | 亚洲砖区免费 | 色啪视频 | 日韩黄色视屏 | 99热激情 | 亚洲 在线 | 欧美久久精品一级黑人c片 1000部多毛熟女毛茸茸 | 伊人成综合网 | 男男gay羞辱feet贱奴vk | 手机看片国产1024 | 久久久精品人妻一区二区三区色秀 | 日干夜操 | 狠狠综合久久 | 欧美一级片免费观看 | 久久国产福利 | 亚洲av片一区二区三区 | 偷拍精品一区二区三区 | 黄色精品免费 | 少妇精品视频 |