Jestのコードカバレッジ


131

Jasmineの上に構築されたJavascript Jestテストフレームワークでコードカバレッジを取得する方法はありますか?

内部フレームワーク、取得したコードカバレッジを出力しません。私はまた、イスタンブール毛布JSCoverを使ってみましたが、どれも機能しません。


私はあまり冗談ではありませんが、config.collectCoverageを見たことはありますか?
Ciro Costa

回答:


123

Jest 21.2.1を使用すると、コマンドラインにコードカバレッジが表示さ--coverageれ、Jestスクリプトに渡してカバレッジディレクトリを作成できます。以下にいくつかの例を示します。

私はJestをローカルにインストールする傾向があります。その場合、コマンドは次のようになります。

npx jest --coverage

私は(確認していませんが)Jestをグローバルにインストールした場合もこれが機能すると思います:

jest --coverage

非常に疎なドキュメントはこちら

カバレッジ/ lcov-reportディレクトリに移動すると、ブラウザにロードできるindex.htmlファイルが見つかりました。コマンドラインで出力された情報に加えて、追加情報といくつかのグラフィック出力が含まれていました。


7
グローバルモジュールを使用しないでください。バージョンの一貫性とパッケージの存在を保証するには、常にnode_modulesviaで実行可能ファイルを使用します./node_modules/.bin/jest --coverage。パッケージがpackage.jsonで名前が付けられている限り、期待するjestの正確なバージョンでの実行を保証できます。
テイスタック

変更されたファイルのみのjestカバレッジを取得するにはどうすればよいですか?
Shanika Ediriweera

カバレッジが特定の制限を下回っている場合にテストを失敗させる簡単な方法はありますか?SO-質問対応:stackoverflow.com/questions/60512167/...
ステファン


88

更新:7/20/2018-coverageReportersのリンクを追加し、名前を更新しました。

更新:2017年8月14日-この回答は完全に古くなっています。今すぐJestのドキュメントをご覧ください。彼らはこれを行う方法についての公式サポートとドキュメントを持っています。

@hankhsiaoは、イスタンブールがJestと協力している、分岐したレポを持っています。これを開発依存関係に追加します

 "devDependencies": {
     "jest-cli": "git://github.com/hankhsiao/jest.git"
 }

また、package.json jestエントリでカバレッジが有効になっていることを確認し、必要な形式を指定することもできます。(htmlはかなり悪いお尻です)。

 "jest": {
     "collectCoverage": true,
     "coverageReporters": ["json", "html"],
 }

coverageReportersのJestドキュメントを参照してください(デフォルトは )["json", "lcov", "text"]

または--coveragejestを呼び出すときに追加します。


1
coverageFormatsオプションは削除されました-jsonとhtmlの両方が毎回生成されるように見えます。

1
--coverageオプションを使用していますが、まったく違いはありません。
gbbr 2015年

3
これは(現在)呼び出さcoverageReportersれ、デフォルトは["json", "lcov", "text"]です。facebook.github.io/jest/docs/…を
Karsten S.

機能しません。値が["json"、 "html"]の不明なオプション "coverageFormats"が見つかりました。
srghma 2017

40

2019年1月:Jestバージョン23.6

特にこのテストを直接または直接使用してテストする場合、この質問を検討している人npmyarn

現在、設定オプションを変更する必要はありません

あたりとして冗談の公式サイトには、カバレッジレポートを生成するには、次の操作を行うことができます。

1-npmの場合:

jest ----coverage引数を渡す前に置く必要があります

npm test -- --coverage

--coverageなしで直接を起動しようとして--も機能しません

2-糸の場合:

--coveragejest の引数を直接渡すことができます

yarn test --coverage

1
変更されたファイルのみのjestカバレッジを取得するにはどうすればよいですか?
Shanika Ediriweera

いつから変わったの?おそらく--watch、この設定を使用する必要があります。
コーン

1
この答えは、人の状態について多くの仮定をしますpackage.json
airtonix

6

了解しました。問題は解決しなかったと誰かが言ったので、以前の答えは無視してください。

新しい答え:

1)最新のjest(v 0.22)を確認してください:https : //github.com/facebook/jest

2)Facebookチームはイスタンブールをカバレッジレポートの一部として配置し、直接使用できます。

3)jestを実行すると、コンソールでカバレッジレポートを取得できます。jestで設定されたルートフォルダーの下に、jsonおよびhtml形式のカバレッジレポートが表示されます。

4)参考までに、npmからインストールした場合、最新バージョンを取得できない場合があります。最初にgithubを試して、カバレッジが必要な範囲であることを確認してください。


古い答え:

同じ問題が発生しました。短い答えは:IstanbulJest一緒に働いていません。

詳細については、次のページを確認してください。

https://github.com/facebook/jest/issues/101

jestは、ネイティブコードのV8コンテキストでJSスクリプトを実行するcontextifyを使用して、istanbulのrequireおよびvm.runInThisContextフックをすべてバイパスします。したがって、標準のフック可能なnode.js関数が使用されていないためイスタンブールカバーは機能せず、すべてのテストは独自のサンドボックスで実行され、カバレッジオブジェクトを格納するグローバルがないため、事前計測ファイルも役に立ちません。

@Ciro Costa:config.collectCoverage'TODO'関数なので、機能しません。ソースコードを確認してください。


問題は、Jestのコードカバレッジを取得する方法でした。イスタンブールとジェストが一緒に働かないというのは本当かもしれませんが、それは質問に答えません。
David Raab 2014年

0

--coverageが機能しない場合は、 'text'または 'text-summary'を追加せずにcoverageReportersを有効にしたことが原因である可能性もあります。ドキュメントから:「注:このオプションを設定すると、デフォルト値が上書きされます。コンソール出力にカバレッジサマリーを表示するには、「text」または「text-summary」を追加してください。」ソース


0

package.jsonファイルを構成する

"テスト": "jest --coverage"、

ここに画像の説明を入力してください

今実行します:

yarn test

すべてのテストが実行を開始し、レポートを取得します。 ここに画像の説明を入力してください


-1

同じ問題があり、以下のように修正しました。

  1. 糸を取り付ける npm install --save-dev yarn
  2. jest-cliをインストールする npm install --save-dev jest-cli
  3. これをpackage.jsonに追加します "jest-coverage": "yarn run jest -- --coverage"

テストを作成したら、コマンドnpm run jest-coverageを実行します。これにより、ルートディレクトリにカバレッジフォルダーが作成されます。/coverage/icov-report/index.htmlには、コードカバレッジのhtmlビューがあります。

幸せなコーディング!


8
糸を取り付ける必要はありません。ヤーンはNPMとはまったく異なるパッケージマネージャーです
ブラック

-10

チュッツパーを試す。使用したばかりです。また、Visual Studioに統合する方法についてブログに投稿しました。

これは私がChutzpahでカバレッジをコーディングした方法です:http : //francorobles.wordpress.com/2014/09/14/code-coverage-with-chutzpah/


チャッツパスはブランケットの上に構築されており、私は上でジェストがそれで動作しないことを指定しました。
Alex Palcuie 14

私が働いたばかりなので興味深い。francorobles.wordpress.com/2014/09/14/...
francorobles

1
あなたはジェストを使用していません。 require。。
Alex Palcuie
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.