web-dev-qa-db-ja.com

Jestのコードカバレッジ

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

内部フレームワーク しない 取得したコードカバレッジを出力します。また、 イスタンブールブランケット 、および JSCover を使用してみましたが、いずれも機能しません。

82
Alex Palcuie

Jest 21.2.1を使用すると、コマンドラインでコードカバレッジを確認し、--coverageをJestスクリプトに渡すことでカバレッジディレクトリを作成できます。以下に例を示します。

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

npx jest --coverage

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

jest --coverage

非常にまばらなドキュメントは ここ です

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

57
ccalvert

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

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

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

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

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

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

Jest documentationcoverageReporters を参照してください(デフォルトは["json", "lcov", "text"]です)

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

72
Adrian Adkison

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

最近この質問を探している人にとっては、特にnpmまたはyarnを直接使用してテストする場合

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

jest公式ウェブサイト に従って、次のようにしてカバレッジレポートを生成できます。

1- npmの場合:

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

npm test -- --coverage

--coverageを使用せずに--を直接呼び出そうとすると、動作しません

2-糸の場合:

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

yarn test --coverage
20
Ahmed Elkoussy

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

新しい回答:

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を使用するため、イスタンブールのrequireおよびvm.runInThisContextフックをすべてバイパスします。したがって、標準のフック可能なnode.js関数が使用されておらず、すべてのテストが独自のサンドボックスで実行され、カバレッジオブジェクトをスタッシュするグローバルがないため、イスタンブールカバーは機能しません。

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

5
Winters

私は同じ問題を抱えていて、以下のように修正しました。

  1. yarn 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ビューがあります。

ハッピーコーディング!

0
Laksh

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

0
thebkr7