CommunityRedacción y edicióngithub.com

photoeven2-netizen/astronusa

Escribe y organiza pruebas unitarias para funciones, métodos y clases usando `package:test`. Úsalo al crear nueva lógica o corregir errores para garantizar que el código sea correcto y sin regresiones.

¿Qué es astronusa?

Esta habilidad está diseñada para que desarrolladores de Dart y Flutter automaticen y estandaricen la redacción y organización de pruebas unitarias utilizando la biblioteca `package:test`. Proporciona pautas claras sobre cómo estructurar archivos de prueba siguiendo la jerarquía del directorio `lib`, cómo escribir pruebas con funciones como `group()`, `test()` y `expect()`, y cómo ejecutarlas con `dart test` o `flutter test`. Además, incluye un flujo de trabajo paso a paso con una lista de verificación que guía desde la creación del archivo de prueba hasta la corrección de fallos mediante un bucle de retroalimentación. Es compatible con proyectos Dart puros y Flutter, y también cubre el uso de mocks con `package:mockito` para probar dependencias externas. Ejemplos concretos de pruebas unitarias y de mocking ilustran las mejores prácticas, lo que facilita su adopción en cualquier proyecto.

Compatible con~Claude Code~Codex CLI~Cursor✓Gemini CLI
npx skills add https://github.com/photoeven2-netizen/astronusa/tree/HEAD/.agents/skills/dart-add-unit-test

Installed? Explore more Redacción y edición skills: steipete/notion, langchain-ai/langchain, bytedance/podcast-generation · View all 6 →

Preguntar en tu IA favorita

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

Documentación

Pruebas en Aplicaciones Dart y Flutter

Contenido

Estructuración de Archivos de Prueba

Organiza los archivos de prueba de manera que reflejen la estructura del directorio lib para mantener la previsibilidad.

  • Coloca todo el código de prueba dentro del directorio test en la raíz del paquete.
  • Agrega _test.dart al final de todos los nombres de archivos de prueba (por ejemplo, lib/src/utils.dart debe probarse en test/src/utils_test.dart).
  • Si escribes pruebas de integración, colócalas en un directorio integration_test en la raíz del paquete.

Escritura de Pruebas

Utiliza package:test como la biblioteca de pruebas estándar para aplicaciones Dart.

  • Importa package:test/test.dart (o package:flutter_test/flutter_test.dart para Flutter).
  • Agrupa pruebas relacionadas usando la función group() para proporcionar un contexto compartido.
  • Define casos de prueba individuales usando la función test().
  • Valida los resultados usando la función expect() junto con comparadores (por ejemplo, equals(), isTrue, throwsA()).
  • Escribe pruebas asíncronas usando la sintaxis estándar async/await. El ejecutor de pruebas espera automáticamente a que el Future se complete.
  • Gestiona la configuración y limpieza de pruebas usando los callbacks setUp() y tearDown().
  • Si pruebas código que depende de inyección de dependencias, usa package:mockito junto con package:test para generar objetos mock, configurar escenarios fijos y verificar interacciones.

Ejecución de Pruebas

Selecciona el ejecutor de pruebas adecuado según el tipo de proyecto y la ubicación de las pruebas.

  • Si trabajas en un proyecto Dart puro, ejecuta las pruebas usando el comando dart test.
  • Si trabajas en un proyecto Flutter, ejecuta las pruebas usando el comando flutter test.
  • Si ejecutas pruebas de integración, especifica explícitamente la ruta del directorio, ya que el ejecutor predeterminado lo ignora: dart test integration_test o flutter test integration_test.

Flujo de Trabajo para Implementar Pruebas

Sigue este flujo de trabajo secuencial al implementar nuevos conjuntos de pruebas. Copia la lista de verificación para rastrear tu progreso.

Progreso de la Tarea

  • 1. Crea el archivo de prueba en el directorio test/, asegurando el sufijo _test.dart.
  • 2. Importa package:test/test.dart y la biblioteca objetivo.
  • 3. Define una función main().
  • 4. Inicializa recursos compartidos o mocks usando setUp().
  • 5. Escribe casos test() agrupados por funcionalidad usando group().
  • 6. Ejecuta el conjunto de pruebas usando el comando CLI apropiado.
  • 7. Bucle de Retroalimentación: Ejecuta prueba -> Revisa el stack trace de fallos -> Corrige implementación o aserciones -> Vuelve a ejecutar hasta que pase.

Ejemplos

Conjunto de Pruebas Unitarias Estándar

Demuestra agrupación, configuración, pruebas síncronas y asíncronas.

import 'package:test/test.dart';
import 'package:my_package/calculator.dart';

void main() {
  group('Calculator', () {
    late Calculator calc;

    setUp(() {
      calc = Calculator();
    });

    test('suma dos números correctamente', () {
      expect(calc.add(2, 3), equals(5));
    });

    test('maneja operaciones asíncronas', () async {
      final result = await calc.fetchRemoteValue();
      expect(result, isNotNull);
      expect(result, greaterThan(0));
    });
  });
}

Mocking con Mockito

Demuestra la configuración de un objeto mock para pruebas de inyección de dependencias.

import 'package:test/test.dart';
import 'package:mockito/mockito.dart';
import 'package:mockito/annotations.dart';
import 'package:my_package/api_client.dart';
import 'package:my_package/data_service.dart';

// Genera el mock usando build_runner: dart run build_runner build
@GenerateNiceMocks([MockSpec<ApiClient>()])
import 'data_service_test.mocks.dart';

void main() {
  group('DataService', () {
    late MockApiClient mockApiClient;
    late DataService dataService;

    setUp(() {
      mockApiClient = MockApiClient();
      dataService = DataService(apiClient: mockApiClient);
    });

    test('devuelve datos parseados en una llamada API exitosa', () async {
      // Configura el mock
      when(mockApiClient.get('/data')).thenAnswer((_) async => '{"id": 1}');

      // Ejecuta el sistema bajo prueba
      final result = await dataService.fetchData();

      // Verifica resultados e interacciones
      expect(result.id, equals(1));
      verify(mockApiClient.get('/data')).called(1);
    });
  });
}

Individual skills in this repo

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

Skills relacionados