mcpField
D
dart-collect-coverage

dart-collect-coverage

github.com/dhruvanbhalaraテスト・品質3050 回インストール9 週間前に更新
リポジトリ

dart-collect-coverage について

dart-collect-coverageは、DartおよびFlutterプロジェクトでテストカバレッジを収集・確認するためのスキルです。自動・手動収集、LCOVとHTMLのレポート、除外指示、CIでのチェックを扱います。

主な機能

  1. 01テストとカバレッジの自動収集
  2. 02LCOV・HTMLレポートの生成
  3. 03関数・分岐カバレッジの収集
  4. 04除外指示によるコードの除外
  5. 05CIへのカバレッジ検査の追加

活用シーン

  1. 01Dartプロジェクトのカバレッジ測定
  2. 02Flutterテストのレポート生成
  3. 03関数・分岐カバレッジの確認
  4. 04CIのカバレッジ基準の設定

インストール

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

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

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

詳細

目次

セットアップ

coverage は必ず dev_dependency として追加してください:

Dart プロジェクト:

dart pub add dev:coverage

Flutter プロジェクト:

flutter pub add dev:coverage

自動収集

同梱の test_with_coverage スクリプトを使えば、コマンド1つでカバレッジを取得できます:

dart run coverage:test_with_coverage

これは自動的に以下を実行します:

  1. すべてのテストを実行する
  2. Dart VM から JSON 形式のカバレッジを収集する
  3. coverage/lcov.info に LCOV レポートとしてフォーマットする

モノレポのサポート: テストディレクトリを明示的に指定します:

dart run coverage:test_with_coverage -- pkgs/foo/test pkgs/bar/test

Flutter 固有のカバレッジ

LCOV の生成
flutter test --coverage

プロジェクトルートに coverage/lcov.info を出力します。

HTML レポートの生成
# Install lcov (macOS)
brew install lcov

# Generate HTML from LCOV
genhtml coverage/lcov.info -o coverage/html

# Open in browser
open coverage/html/index.html
生成されたコードの除外
lcov --remove coverage/lcov.info \
  '*.g.dart' \
  '*.freezed.dart' \
  '*.part.dart' \
  -o coverage/lcov_cleaned.info

手動 VM サービスワークフロー

カバレッジ収集をきめ細かく制御する場合 (ブランチ/関数レベル):

1. VM サービスを有効にしてテストを実行
dart run --pause-isolates-on-exit \
  --disable-service-auth-codes \
  --enable-vm-service=8181 \
  test &
2. 生のカバレッジを収集
dart run coverage:collect_coverage \
  --wait-paused \
  --uri=http://127.0.0.1:8181/ \
  -o coverage/coverage.json \
  --resume-isolates \
  --function-coverage \
  --branch-coverage

任意のフラグ:

  • --function-coverage: 関数レベルのメトリクス (Dart VM 2.17.0+)
  • --branch-coverage: ブランチレベルのメトリクス (Dart VM 2.17.0+)
3. LCOV にフォーマット
dart run coverage:format_coverage \
  --packages=.dart_tool/package_config.json \
  --lcov \
  -i coverage/coverage.json \
  -o coverage/lcov.info \
  --check-ignore

カバレッジ除外ディレクティブ

インラインコメントを使って、特定のコードをカバレッジのメトリクスから除外します。フォーマット時に --check-ignore を渡すと、これを強制できます。

ディレクティブスコープ用途
// coverage:ignore-line単一行到達不能な分岐、プラットフォームチェック
// coverage:ignore-start / // coverage:ignore-endブロック生成されたコード、レガシーメソッド
// coverage:ignore-fileファイル全体生成されたファイル、設定ファイル
// coverage:ignore-file
// This entire file is excluded from coverage

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

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

CI 統合

GitHub Actions のカバレッジゲート
- name: Run tests with coverage
  run: flutter test --coverage

- name: Check coverage threshold
  run: |
    COVERAGE=$(lcov --summary coverage/lcov.info 2>&1 | grep "lines" | awk '{print $2}' | sed 's/%//')
    echo "Coverage: $COVERAGE%"
    if (( $(echo "$COVERAGE < 80" | bc -l) )); then
      echo "Coverage below 80% threshold!"
      exit 1
    fi

- name: Upload coverage
  uses: codecov/codecov-action@v4
  with:
    files: coverage/lcov.info
カバレッジの目標 (AGENTS.md より)
  • domain 層と bloc 層は 100% のロジックカバレッジ。
  • すべての主要な UI コンポーネントに ウィジェットカバレッジ。
  • 生成されたコード (.g.dart、.freezed.dart) には // coverage:ignore-file を使用します。

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

タスクの進捗
  • ステップ 1: coverage を dev_dependencies に追加します。
  • ステップ 2: flutter test --coverage (または dart run coverage:test_with_coverage) を実行します。
  • ステップ 3: coverage/lcov.info が存在することを検証します。
  • ステップ 4: 生成されたコードを除外します: lcov --remove ... '*.g.dart' '*.freezed.dart'。
  • ステップ 5: HTML を生成します: genhtml coverage/lcov.info -o coverage/html。
  • ステップ 6: カバレッジが不足しているファイルを確認します: テストを追加するか、// coverage:ignore-file を付けます。
  • ステップ 7: CI パイプラインにカバレッジゲートを追加します (最低 80%)。

例

pubspec.yaml の設定
name: my_app
environment:
  sdk: ^3.0.0

dev_dependencies:
  flutter_test:
    sdk: flutter
  coverage: ^1.15.0
  bloc_test: ^9.1.0
  mocktail: ^1.0.0
クイックカバレッジチェックスクリプト
#!/bin/bash
# scripts/coverage.sh
set -e

echo "Running tests with coverage..."
flutter test --coverage

echo "Filtering generated code..."
lcov --remove coverage/lcov.info \
  '*.g.dart' '*.freezed.dart' '*.part.dart' \
  -o coverage/lcov_cleaned.info

echo "Generating HTML report..."
genhtml coverage/lcov_cleaned.info -o coverage/html

echo "Opening report..."
open coverage/html/index.html

コメント