mcpField
D
dart-collect-coverage

dart-collect-coverage

github.com/dart-langテスト・品質53218.6k 回インストール2 週間前に更新
リポジトリ

dart-collect-coverage について

DartおよびFlutterプロジェクトでテストカバレッジを収集し、レポートを作成するためのスキルガイドです。LCOVの自動生成、カバレッジ除外、より細かく収集するVMサービスの手順を扱います。

主な機能

  1. 01Dart・Flutterのテストカバレッジ指針
  2. 02JSONおよびLCOVレポートの生成
  3. 03行・ブロック・ファイルの除外
  4. 04VMサービス経由のカバレッジ収集
  5. 05ブランチ・関数カバレッジの追加取得

活用シーン

  1. 01テスト後のLCOVレポート生成
  2. 02生成コードのメトリクス除外
  3. 03Dartワークスペースのカバレッジ収集
  4. 04ブランチまたは関数カバレッジの取得

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/dart-lang/skills --skill dart-collect-coverage

インストール後、Claude Code で/dart-collect-coverageを入力して読み込まれたか確認します。

詳細

Dart および Flutter のテストカバレッジの実装

目次

テストの基礎

標準的な Dart のテスト手法に従ってテストスイートを構成します。Dart プロジェクトでは package:test を、Flutter プロジェクトでは flutter_test を使用します。

  • ユニットテスト: 個々の関数、メソッド、クラスを検証します。
  • コンポーネント/ウィジェットテスト: モックオブジェクト(package:mockito)を使用して、コンポーネントの動作、レイアウト、インタラクションを検証します。
  • 統合テスト: シミュレートされたデバイスまたは実機で、アプリ全体のフローを検証します。

カバレッジのディレクティブ

インラインコメントを使用して、特定の行、ブロック、ファイル全体をカバレッジ指標から除外します。これらのディレクティブを適用するには、フォーマット時に --check-ignore フラグを渡します。

  • 1 行を無視する:// coverage:ignore-line
  • コードブロックを無視する:// coverage:ignore-start および // coverage:ignore-end
  • ファイル全体を無視する:// coverage:ignore-file

ワークフロー:カバレッジレポートの設定と生成

以下の順序でワークフローに従い、coverage パッケージを追加し、テストを実行して LCOV レポートを生成します。

タスクの進行状況チェックリスト:

  • 1. coverage を dev_dependency として追加します。
  • 2. 自動カバレッジスクリプトを実行します。
  • 3. LCOV の出力を検証します。
1. 依存関係の追加

coverage パッケージを dev_dependency としてプロジェクトに追加します。通常の依存関係には追加しないでください。

標準的な Dart プロジェクトの場合:

dart pub add dev:coverage

Flutter プロジェクトの場合:

flutter pub add dev:coverage
2. カバレッジの収集と LCOV の生成

同梱されている test_with_coverage スクリプトを使用します。このスクリプトはすべてのテストを自動的に実行し、Dart VM から JSON カバレッジデータを収集して、LCOV レポートに変換します。

dart run coverage:test_with_coverage

注:Dart ワークスペース(モノレポ)で作業している場合は、テストディレクトリを明示的に指定します(例:dart run coverage:test_with_coverage -- pkgs/foo/test pkgs/bar/test)。

3. フィードバックループ:出力の検証

バリデーターを実行 -> エラーを確認 -> 修正:

  1. プロジェクトのルートに coverage/ ディレクトリが作成されていることを確認します。
  2. coverage/coverage.json(生データ)と coverage/lcov.info(フォーマット済みレポート)が存在することを確認します。
  3. 特定のファイルのカバレッジが欠落している場合は、そのファイルがテストファイルからインポートされ、実行されていることを確認します。意図的に除外する場合は、// coverage:ignore-file を追加します。

ワークフロー:高度な手動カバレッジの収集

VM サービスをきめ細かく制御する必要がある場合、アイソレートの一時停止を個別に扱う場合、またはブランチ/関数レベルのカバレッジが必要な場合は、手動収集ワークフローを使用します。

タスクの進行状況チェックリスト:

  • 1. VM サービスを有効にしてテストを実行します。
  • 2. 生の JSON カバレッジを収集します。
  • 3. JSON を LCOV に変換します。
1. VM サービスを有効にしてテストを実行

終了時にアイソレートを一時停止し、特定のポート(例:8181)で VM サービスを公開するようにしてテストを実行します。

dart run --pause-isolates-on-exit --disable-service-auth-codes --enable-vm-service=8181 test &
2. 生のカバレッジを収集

実行中の VM サービスからカバレッジデータを抽出し、JSON ファイルに出力します。

dart run coverage:collect_coverage --wait-paused --uri=http://127.0.0.1:8181/ -o coverage/coverage.json --resume-isolates

任意:より詳細な指標を収集するには、--function-coverage と --branch-coverage を追加します(Dart VM 2.17.0 以降が必要です)。

3. LCOV に変換

生の JSON データを標準的な LCOV 形式に変換します。

dart run coverage:format_coverage --packages=.dart_tool/package_config.json --lcov -i coverage/coverage.json -o coverage/lcov.info --check-ignore

例

例:pubspec.yaml の設定

pubspec.yaml で coverage パッケージが dev_dependencies のみに指定されていることを確認します。

name: my_dart_app
environment:
  sdk: ^3.0.0

dependencies:
  path: ^1.8.0

dev_dependencies:
  test: ^1.24.0
  coverage: ^1.15.0
例:除外ディレクティブの適用

除外ディレクティブを使用して、生成コードやテストできないエッジケースによってカバレッジスコアが低下するのを防ぎます。

// coverage:ignore-file
import 'package:meta/meta.dart';

class SystemConfig {
  final String env;

  SystemConfig(this.env);

  // coverage:ignore-start
  void legacyInit() {
    print('Deprecated initialization');
  }
  // coverage:ignore-end

  bool isProduction() {
    if (env == 'prod') return true;
    return false; // coverage:ignore-line
  }
}

コメント