¿Cuál es la mejor práctica para tests de integración que necesitan PostgreSQL?
Opciones
- Hacer mock de todo el ORM y comprobar las llamadas
- Ejecutar Postgres real en un contenedor, con rollback por test (Opción correcta)
- Usar SQLite en su lugar, porque todo el SQL es estándar
- Apuntar los tests a la base de datos compartida de producción
Respuesta
Usar un Postgres real (por ejemplo en un contenedor con testcontainers o docker compose) y aislar cada test con un rollback de transacción o un esquema nuevo
Por qué
Los tests de integración comprueban que tu código funciona de verdad con la dependencia real. Hacer mock del ORM no prueba nada real; SQLite se comporta distinto de Postgres (tipos, restricciones, JSON, locks).
Arranca un Postgres desechable en Docker para los tests. Mantén los tests independientes con un rollback de la transacción de cada test o recreando el esquema.
Nunca toques datos de producción en los tests.
Recuerda
Tests de integración: base de datos real en un contenedor, aislada por test.