Mochaでのコードカバレッジ


288

NodeJSアプリケーションのテストにMochaを使用しています。コードカバレッジ機能の使い方を理解できません。私はグーグルで試しましたが、適切なチュートリアルが見つかりませんでした。助けてください。

回答:


410

コードカバレッジには追加のライブラリが必要であり、イスタンブールがいかに強力で簡単であるかに驚かされます。モカテストに合格したら、次のことを試してください。

npm install nyc

ここで、既存のテストコマンドの前にコマンドnycを配置するだけです。次に例を示します。

{
  "scripts": {
    "test": "nyc mocha"
  }
}

30
また、ローカルにインストールされたバージョンのmochaを実行している場合は、を試してくださいistanbul cover node_modules/mocha/bin/_mocha
エリックマッカーシー

102
または、istanbulとmochaの両方をローカルにインストールし、package.jsonのスクリプトセクションに次を追加して、npm run Coverage: "coverage": "./node_modules/istanbul/lib/cli.js cover ./node_modules/ mocha / bin / _mocha---ui bdd -R spec -t 5000
Dan Kohn

6
このコマンドをWindowsで実行するのに苦労しましたが、モカビンへのフルパスを指定することで、コマンドを機能させることができました。 istanbul.cmd cover C:\Users\{UserName}\AppData\Roaming\npm\node_modules\mocha\bin\_mocha
Jason Jarrett、

4
$(npm bin)標準的なショートカットです./node_modules/.bin/、とistanbul/lib/cli.jsにエイリアスされたistanbulbinフォルダに。そこでここでは短いコマンドがあります:$(npm bin)/istanbul cover $(npm bin)/_mocha -- --ui bdd -R spec -t 5000
ヘンリー・ブライス

19
@ Windowsユーザー:istanbul cover node_modules/mocha/bin/_mocha -- -R spec
Pier-Luc Gendreau、2014

150

現在(2020年istanbulを使用する好ましい方法は、「最先端のコマンドラインインターフェース」 nycを使用することです。

セットアップ

まず、プロジェクトにインストールします

npm i nyc --save-dev

あなたはNPMベースのプロジェクトを持っている場合はその後、ちょうど内部のテストスクリプトを変更するscriptsあなたのオブジェクトpackage.jsonのあなたのコードカバレッジを実行するために、ファイルモカテスト:

{
  "scripts": {
    "test": "nyc --reporter=text mocha"
  }
}

走る

テストを実行します

npm test

テストの出力直後に、コンソールに次のようなテーブルが表示されます。

イスタンブールNycモカコードカバレッジ

カスタマイズ

HTMLレポート

使うだけ

nyc --reporter=html

の代わりにtext。これで、内部でレポートが作成され./coverage/index.htmlます。

レポートの形式

イスタンブールは、幅広いレポート形式をサポートしています。ちょうどその時に見てレポートライブラリあなたのために最も有用見つけること。--reporter=REPORTER_NAME必要なフォーマットごとにオプションを追加するだけです。たとえば、

nyc --reporter=html --reporter=text

コンソールとhtmlレポートの両方が表示されます。

npmテストでカバレッジを実行しないでください

に別のスクリプトを追加して、テストランナー(例:mocha)だけにスクリプトをpackage.json残しtestます。

{
  "scripts": {
    "test": "mocha",
    "test-with-coverage": "nyc --reporter=text mocha"
  }
}

次に、このカスタムスクリプトを実行します

npm run test-with-coverage

コードカバレッジでテストを実行します。

コードカバレッジが低いと強制テストが失敗する

合計コードカバレッジが90%未満の場合は失敗します。

nyc --check-coverage --lines 90 

少なくとも1つのファイルのコードカバレッジが90%未満の場合、失敗します。

nyc --check-coverage --lines 90 --per-file

2
これはジャスミンに対しても完全に機能します: "nyc --reporter = html jasmine"
Sandip Subedi

12
「now(2017)」を追加していただきありがとう
ござい

2
他の誰かが混乱した場合-npmリポジトリistanbulnycに取って代わられたようです。その記載された依存関係につき、イスタンブールは、すべての中で維持されている様々なパッケージに離れて分割したistanbuljs monorepo
AAAAAA

1
私は--reporter=html有効にしていますが、htmlファイルは常に空です。カバーされていないブロックやカバーされている%などについては何も表示されません。表のヘッダーだけです
TGW

1
それで... CLIコマンドがNYCであるイスタンブールと呼ばれるフレームワーク?エラー...私はそれを信用していません!
Tivie

19

Blanket.jsも完璧に動作します。

npm install --save-dev blanket

test / tests.jsの前

require('blanket')({
    pattern: function (filename) {
        return !/node_modules/.test(filename);
    }
});

走る mocha -R html-cov > coverage.html


require( 'blanket')({pattern:function(filename){return!/node_modules/.test(filename);}});
jsan 2014

4
2015年現在、blanket.jsはメンテナンスされておらず、ES6をサポートしていません。イスタンブールを強くお勧めします。
teroi 2018年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.