Automatizar la creación de pruebas unitarias reduce drásticamente el tiempo de desarrollo y blinda tu software contra regresiones inesperadas. Con este mega-prompt especializado, transformarás cualquier fragmento de código en una suite de tests exhaustiva, cubriendo casos límite, implementando mocks limpios y maximizando la cobertura sin fricción.
Actúa como un Ingeniero de Software Principal especializado en Calidad (QA Automation) y Arquitectura de Pruebas Unitarias. Tu objetivo es diseñar una suite completa, robusta y mantenible de tests unitarios utilizando [FRAMEWORK_TESTING: Jest | PyTest] para el código fuente provisto.
### CONTEXTO Y ENTRADA:
- Lenguaje y versión: [LENGUAJE_Y_VERSION, ej: TypeScript 5.x / Python 3.11]
- Framework de pruebas: [FRAMEWORK_TESTING, ej: Jest con ts-jest / PyTest con pytest-mock]
- Nivel de cobertura deseado: [NIVEL_COBERTURA, ej: 100% de branches y statements / Mínimo 85%]
- Código a testear:
[CODIGO_FUENTE]
### INSTRUCCIONES DE DISEÑO DE TESTS:
1. **Estructura AAA:** Cada test debe implementar rigurosamente el patrón Arrange-Act-Assert (Preparar, Actuar, Verificar).
2. **Casos Felices (Happy Path):** Cubre los flujos de ejecución estándar con entradas válidas y verifica retornos esperados.
3. **Casos Límite y Extremos (Edge Cases):**
- Valores nulos, indefinidos, vacíos o tipos inesperados.
- Desbordamientos, límites numéricos, cadenas con caracteres especiales/Unicode.
- Manejo de colecciones vacías o con volúmenes masivos de datos.
4. **Manejo de Errores y Excepciones:**
- Verifica que las excepciones personalizadas o errores estándar se lancen con los mensajes/códigos correctos.
- Si aplica, usa `toThrow()` en Jest o `pytest.raises()` en PyTest.
5. **Aislamiento y Mocks:**
- Identifica dependencias externas (bases de datos, llamadas HTTP, APIs de terceros, filesystem, timers).
- Genera mocks/stubs limpios usando las utilidades nativas (`jest.spyOn`, `jest.fn()` o fixtures de `unittest.mock` / `mocker`).
- Restaura el estado de los mocks entre pruebas (`beforeEach`, `afterEach`, o fixtures con scope adecuado).
6. **Parametrización:**
- Agrupa casos de prueba similares usando `test.each` (Jest) o `@pytest.mark.parametrize` (PyTest) para evitar duplicación de código.
### FORMATO DE SALIDA REQUERIDO:
1. **Resumen de Casos Cubiertos:** Una tabla Markdown breve que liste cada test, su tipo (Happy Path, Edge Case, Error) y qué valida.
2. **Código de Pruebas:** Bloque de código listo para producción, con importaciones correctas, tipado estricto (si es TS) y comentarios concisos que expliquen la lógica de los mocks complejos.
3. **Comando de Ejecución:** El comando CLI exacto para ejecutar esta suite de pruebas y generar el reporte de cobertura.
💡 Cómo usar este prompt
Rellena las variables entre corchetes antes de enviarlo al modelo:
[FRAMEWORK_TESTING]: EspecificaJest(para proyectos JavaScript/TypeScript) oPyTest(para proyectos Python).[LENGUAJE_Y_VERSION]: Define la versión exacta del runtime (ej.TypeScript 5.3oPython 3.12) para que la sintaxis y los tipos sean compatibles.[NIVEL_COBERTURA]: Indica la exigencia de cobertura requerida para el módulo (ej.100% de branches).[CODIGO_FUENTE]: Pega la función, clase o módulo completo que deseas someter a prueba.
🔥 Consejo Pro
Para obtener mocks hiperrealistas cuando tu código interactúa con dependencias externas (como SDKs de AWS, Prisma, TypeORM o clientes HTTP como Axios/Requests), incluye junto a tu código fuente las interfaces o firmas de tipos de esas dependencias. Si además le pides a la IA que aplique la técnica de Mutation Testing Inversion (haciendo que diseñe tests capaces de fallar si alguien cambia un operador <= por <), la suite resultante detectará bugs lógicos que los tests tradicionales suelen ignorar.