CommunityProgramación y desarrollogithub.com

photoeven2-netizen/astronusa

Recolecta cobertura usando el paquete coverage y genera un informe LCOV.

¿Qué es astronusa?

Esta habilidad automatiza la recolección y el formateo de cobertura de pruebas en proyectos Dart y Flutter utilizando el paquete `coverage`. Su objetivo principal es generar un informe LCOV (`coverage/lcov.info`) a partir de los datos de cobertura del código, lo que permite integrar métricas de cobertura en flujos de CI/CD o herramientas de visualización. La habilidad soporta tanto un flujo simplificado (con el script `test_with_coverage`) como un flujo manual avanzado para control granular sobre el servicio VM, incluyendo cobertura de ramas y funciones. Además, proporciona directivas para ignorar líneas, bloques o archivos específicos mediante comentarios en el código (`// coverage:ignore-line`, etc.). Es útil para desarrolladores que necesitan validar la calidad de sus pruebas y mantener altos estándares de cobertura en sus proyectos Dart/Flutter.

Compatible con~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 Programación y desarrollo skills: steipete/bluebubbles, steipete/eightctl, steipete/blucli · View all 6 →

Preguntar en tu IA favorita

Abre un nuevo chat con esta habilidad de agente ya precargada.

Documentación

Implementación de cobertura de pruebas en Dart y Flutter

Contenido

Fundamentos de pruebas

Estructura tus suites de pruebas utilizando los paradigmas estándar de pruebas en Dart. Usa package:test para proyectos Dart y flutter_test para proyectos Flutter.

  • Pruebas unitarias: Verifican funciones, métodos o clases individuales.
  • Pruebas de componentes/widgets: Verifican el comportamiento, diseño e interacción de componentes usando objetos simulados (package:mockito).
  • Pruebas de integración: Verifican flujos completos de la aplicación en dispositivos simulados o reales.

Directivas de cobertura

Excluye líneas, bloques o archivos completos de las métricas de cobertura usando comentarios en línea. Usa la bandera --check-ignore durante el formateo para aplicar estas directivas.

  • Ignorar una línea: // coverage:ignore-line
  • Ignorar un bloque de código: // coverage:ignore-start y // coverage:ignore-end
  • Ignorar un archivo completo: // coverage:ignore-file

Flujo de trabajo: Configurar y generar informes de cobertura

Sigue este flujo secuencial para agregar el paquete coverage, ejecutar las pruebas y generar un informe LCOV.

Lista de verificación de progreso de tareas:

  • 1. Agregar coverage como dev_dependency.
  • 2. Ejecutar el script automático de cobertura.
  • 3. Validar la salida LCOV.

1. Agregar dependencias

Agrega el paquete coverage como dev_dependency a tu proyecto. No lo agregues a las dependencias estándar.

Si trabajas en un proyecto Dart estándar:

dart pub add dev:coverage

Si trabajas en un proyecto Flutter:

flutter pub add dev:coverage

2. Recolectar cobertura y generar LCOV

Usa el script incluido test_with_coverage. Este script ejecuta automáticamente todas las pruebas, recolecta los datos JSON de cobertura de la máquina virtual Dart y los formatea en un informe LCOV.

dart run coverage:test_with_coverage

Nota: Si trabajas dentro de un espacio de trabajo Dart (monorepo), especifica los directorios de prueba explícitamente (ej: dart run coverage:test_with_coverage -- pkgs/foo/test pkgs/bar/test).

3. Bucle de retroalimentación: Validar salida

Ejecutar validador -> revisar errores -> corregir:

  1. Verifica que se haya creado el directorio coverage/ en la raíz del proyecto.
  2. Asegúrate de que existan coverage/coverage.json (datos sin procesar) y coverage/lcov.info (informe formateado).
  3. Si falta cobertura para archivos específicos, asegúrate de que sean importados y ejecutados por tus archivos de prueba, o agrega // coverage:ignore-file si están intencionalmente excluidos.

Flujo de trabajo: Recolección manual avanzada de cobertura

Si necesitas control granular sobre el servicio VM, pausa de aislamientos o cobertura a nivel de ramas y funciones, usa el flujo de trabajo manual.

Lista de verificación de progreso de tareas:

  • 1. Ejecutar pruebas con el servicio VM habilitado.
  • 2. Recolectar cobertura JSON sin procesar.
  • 3. Formatear JSON a LCOV.

1. Ejecutar pruebas con el servicio VM

Ejecuta las pruebas mientras pausas los aislamientos al salir y expones el servicio VM en un puerto específico (ej: 8181).

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

2. Recolectar cobertura sin procesar

Extrae los datos de cobertura del servicio VM en ejecución y escríbelos en un archivo JSON.

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

Opcional: Agrega --function-coverage y --branch-coverage para obtener métricas más profundas (requiere Dart VM 2.17.0+).

3. Formatear a LCOV

Convierte los datos JSON sin procesar al formato LCOV estándar.

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

Ejemplos

Ejemplo: Configuración de pubspec.yaml

Asegúrate de que tu pubspec.yaml refleje el paquete coverage estrictamente bajo 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

Ejemplo: Aplicar directivas de ignorar

Usa directivas de ignorar para evitar que el código generado o casos límite no comprobables reduzcan los puntajes de cobertura.

// 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
  }
}

Individual skills in this repo

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

Skills relacionados