CommunityCodierung & Entwicklunggithub.com

photoeven2-netizen/astronusa

Sammle Code-Coverage mit dem Paket `coverage` und erstelle einen LCOV-Bericht.

Was ist astronusa?

Dieses Skill automatisiert die Erfassung und Generierung von Testabdeckungsberichten für Dart- und Flutter-Projekte mithilfe des offiziellen `coverage`-Pakets. Es bietet sowohl einen schnellen automatisierten Workflow (`test_with_coverage`) als auch eine erweiterte manuelle Methode zur Steuerung der VM-Dienst-Ports und Isolate-Pausierung. Entwickler können damit Codezeilen, -blöcke oder ganze Dateien über Inline-Kommentare von der Abdeckung ausschließen, was besonders für generierten Code oder schwer testbare Randfälle nützlich ist. Das Skill unterstützt sowohl Dart- als auch Flutter-Projekte und generiert standardisierte LCOV-Dateien, die in CI/CD-Pipelines oder für visuelle Berichte verwendet werden können.

Funktioniert mit~Claude Code~Codex CLI~Cursor✓Gemini CLI
npx skills add https://github.com/photoeven2-netizen/astronusa/tree/HEAD/.agents/skills/dart-collect-coverage

Installed? Explore more Codierung & Entwicklung skills: steipete/bluebubbles, steipete/eightctl, steipete/blucli · View all 6 →

In Ihrer bevorzugten KI fragen

Öffnet einen neuen Chat, in dem dieser Agent-Skill bereits geladen ist.

Dokumentation

Implementierung von Dart- und Flutter-Testabdeckung

Inhalt

Testgrundlagen

Strukturieren Sie Ihre Testsuiten nach den standardmäßigen Dart-Testparadigmen. Verwenden Sie package:test für Dart-Projekte und flutter_test für Flutter-Projekte.

  • Unit-Tests: Überprüfen einzelne Funktionen, Methoden oder Klassen.
  • Komponenten-/Widget-Tests: Überprüfen Komponentenverhalten, Layout und Interaktion mit Mock-Objekten (package:mockito).
  • Integrationstests: Überprüfen vollständige App-Abläufe auf simulierten oder echten Geräten.

Abdeckungsdirektiven

Schließen Sie bestimmte Zeilen, Blöcke oder ganze Dateien mit Inline-Kommentaren von der Abdeckungsmessung aus. Übergeben Sie das Flag --check-ignore während der Formatierung, um diese Direktiven durchzusetzen.

  • Einzelne Zeile ignorieren: // coverage:ignore-line
  • Codeblock ignorieren: // coverage:ignore-start und // coverage:ignore-end
  • Ganze Datei ignorieren: // coverage:ignore-file

Workflow: Konfigurieren und Erstellen von Abdeckungsberichten

Folgen Sie diesem sequenziellen Workflow, um das coverage-Paket hinzuzufügen, Tests auszuführen und einen LCOV-Bericht zu generieren.

Aufgabenfortschritts-Checkliste:

  • 1. coverage als dev_dependency hinzufügen.
  • 2. Das automatisierte Abdeckungsskript ausführen.
  • 3. Die LCOV-Ausgabe validieren.

1. Abhängigkeiten hinzufügen

Fügen Sie das coverage-Paket als dev_dependency zu Ihrem Projekt hinzu. Fügen Sie es nicht zu den Standardabhängigkeiten hinzu.

Bei einem standardmäßigen Dart-Projekt:

dart pub add dev:coverage

Bei einem Flutter-Projekt:

flutter pub add dev:coverage

2. Abdeckung erfassen und LCOV generieren

Verwenden Sie das integrierte Skript test_with_coverage. Dieses Skript führt automatisch alle Tests aus, sammelt die JSON-Abdeckungsdaten von der Dart-VM und formatiert sie in einen LCOV-Bericht.

dart run coverage:test_with_coverage

Hinweis: Wenn Sie in einem Dart-Workspace (Monorepo) arbeiten, geben Sie die Testverzeichnisse explizit an (z.B. dart run coverage:test_with_coverage -- pkgs/foo/test pkgs/bar/test).

3. Rückmeldungsschleife: Ausgabe validieren

Validator ausführen -> Fehler überprüfen -> korrigieren:

  1. Stellen Sie sicher, dass das Verzeichnis coverage/ im Projektstammverzeichnis erstellt wurde.
  2. Stellen Sie sicher, dass coverage/coverage.json (Rohdaten) und coverage/lcov.info (formatierter Bericht) vorhanden sind.
  3. Wenn die Abdeckung für bestimmte Dateien fehlt, stellen Sie sicher, dass diese importiert und von Ihren Testdateien ausgeführt werden, oder fügen Sie // coverage:ignore-file hinzu, wenn sie absichtlich ausgeschlossen sind.

Workflow: Erweiterte manuelle Abdeckungserfassung

Wenn Sie eine detaillierte Kontrolle über den VM-Dienst, das Anhalten von Isolaten oder eine Abdeckung auf Verzweigungs-/Funktionsebene benötigen, verwenden Sie den manuellen Workflow.

Aufgabenfortschritts-Checkliste:

  • 1. Tests mit aktiviertem VM-Dienst ausführen.
  • 2. Roh-JSON-Abdeckung erfassen.
  • 3. JSON in LCOV formatieren.

1. Tests mit VM-Dienst ausführen

Führen Sie Tests aus, während Sie Isolate beim Beenden anhalten und den VM-Dienst auf einem bestimmten Port (z.B. 8181) freigeben.

dart run --pause-isolates-on-exit --disable-service-auth-codes --enable-vm-service=8181 test &

2. Rohabdeckung erfassen

Extrahieren Sie die Abdeckungsdaten vom laufenden VM-Dienst und geben Sie sie in eine JSON-Datei aus.

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

Optional: Hängen Sie --function-coverage und --branch-coverage an, um tiefere Metriken zu sammeln (erfordert Dart VM 2.17.0+).

3. In LCOV formatieren

Konvertieren Sie die rohen JSON-Daten in das standardmäßige LCOV-Format.

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

Beispiele

Beispiel: pubspec.yaml-Konfiguration

Stellen Sie sicher, dass Ihre pubspec.yaml das coverage-Paket strikt unter dev_dependencies aufführt.

name: my_dart_app
environment:
  sdk: ^3.0.0

dependencies:
  path: ^1.8.0

dev_dependencies:
  test: ^1.24.0
  coverage: ^1.15.0

Beispiel: Anwenden von Ignore-Direktiven

Verwenden Sie Ignore-Direktiven, um zu verhindern, dass generierter Code oder nicht testbare Randfälle die Abdeckungswerte senken.

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

class SystemConfig {
  final String env;

  SystemConfig(this.env);

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

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

Individual skills in this repo

This repo contains 3 individual skills — each has its own dedicated page.

Verwandte Skills