Uso de unit tests para migraciones seguras de base de datos
Clase 10 de 18 • Curso de Claude Code
Garantiza una migración de base de datos sin sorpresas con un flujo probado: activar unit tests en contenedores, planificar con Cloud Code en plan mode, crear migraciones con Alembic y validar endpoints. Aquí verás cómo se resolvió un fallo por dependencias, cómo se creó la tabla de course rating y cómo se certificó el servicio con verificaciones adicionales.
¿Cómo se garantiza la migración con unit tests y dependencias clave?
Para que el código sea confiable, la base es que los unit tests corran al 100%. Se detectó un error por dependencias faltantes y se solucionó agregando httpx y pytest-asyncio a las dependencias opcionales y reconstruyendo con UV. Con eso, las pruebas se pudieron ejecutar dentro del contenedor de API sin bloquear el avance.
- Agregar httpx y pytest-asyncio a dependencias opcionales.
- Reconstruir con UV y reintentar ejecución de pruebas.
- Confirmar que los tests corren dentro del contenedor de API.
¿Qué comandos se ejecutan en el contenedor de API?
El objetivo es correr pytest dentro del contenedor con soporte de Docker y el tool de Bash de Cloud Code.
docker compose exec api pytest
docker composese autoriza una vez para evitar confirmaciones repetidas.- El tool de Bash permite ejecutar como en la terminal nativa.
¿Qué valida el set de pruebas?
Se observaron pruebas como “traer todos los cursos” y “traer una lista vacía”. El set reportó ejecución al 100%.
- Lectura de cursos existentes.
- Respuesta con lista vacía cuando aplica.
- Servicio activo y coherente tras cambios.
¿Cómo usar Cloud Code en plan mode para crear migraciones Alembic?
Se trabaja con Cloud Code para planificar y ejecutar la fase 1 del plan de implementación: base de datos. Se alterna entre modos para controlar ejecución:
- Modo por defecto: pide confirmación antes de cada paso.
- Plan mode: muestra el plan antes de ejecutar.
- Auto accept: aprueba automáticamente todas las acciones.
Para contexto de rutas, el “bash mode” se activa con ! y permite comandos como pwd para confirmar el directorio actual.
!pwd
- Si el archivo de especificación no se encuentra, se corrige el directorio (salir de Cloud Code y reubicar si es necesario).
- Se vuelve a iniciar con el directorio correcto (por ejemplo, backend) y se continúa.
¿Qué pasos ejecuta el plan para la tabla course rating?
El plan detectó el objetivo: crear la tabla de course rating en Postgres con constraints e índices, y aplicar migraciones de Alembic.
- Crear la nueva migración y su archivo asociado.
- Ejecutar la migración con un comando de
makeprovisto en el contexto. - Verificar en Postgres que se aplicó correctamente.
# Ejemplo ilustrativo de pasos
make <comando-de-migracion>
- Se autorizan comandos de
docker composepara no interrumpir el flujo. - Se recibe un resumen: archivo de migraciones creado, estructura de tabla correcta, constraints e índices listos, migración validada en Postgres.
¿Cómo se actualiza el plan y el checklist desde el editor?
Se conecta Cloud Code con el editor para marcar tareas completadas.
- Verifica que el archivo activo se refleje en la barra inferior.
- Selecciona el bloque y usa “command option K” para mencionar líneas como contexto.
- Indica: “marca como finalizadas las tareas que ya lo están”.
- El plan se actualiza con los checks correspondientes.
¿Cómo se valida el servicio con endpoints y health check?
Tras cerrar la fase de base de datos, se repiten los unit tests para garantizar que nada se rompió. Luego se agrega una validación adicional: el endpoint de health y otros principales.
- Reejecutar unit tests en el contenedor de API.
- Consultar el endpoint de salud y endpoints principales.
- Permitir comandos
curly Python 3 para validación de respuesta.
# Verificación de salud
docker compose exec api curl /health
# Prueba rápida con Python 3 (ilustrativa)
docker compose exec api python3 -c "print('ok')"
Resultados claves reportados por Cloud Code:
- Tests unitarios: OK.
- Contenedor: activo.
- Endpoints: respondiendo correctamente.
Habilidades y conceptos aplicados:
- Diagnóstico de fallos por dependencias en unit tests con httpx y pytest-asyncio.
- Ejecución de pruebas en contenedores con
docker composey tool de Bash. - Uso de plan mode, auto accept y modo por defecto para control seguro.
- Migraciones con Alembic: creación de archivo, ejecución y validación en Postgres.
- Gestión de directorios con
pwdy “bash mode” con!. - Orquestación con
makey actualización de checklist desde el editor. - Validación integral vía endpoint de health y pruebas tipo integración con
curly Python 3.
¿Listo para continuar? El siguiente reto es implementar la fase 2: creación de modelos en SQLAlchemy usando Cloud Code. Comparte en comentarios los retos que encuentres y cómo los resuelves.