Saltar al contenido

Lección 16 de 17 · Lectura y práctica

Pruebas y Despliegue del Proyecto

Tipo de lección: VideoConcepto claveLas pruebas y el despliegue son la puerta de entrada a producción para cualquier aplicación backend. Imagina que estás construyendo un puente: el esquema y las migraciones son los planos, las.

Del concepto a la práctica

Taller de esta lección

Las pruebas del proyecto deben separar comportamiento de aplicación y persistencia. Un caso de integración puede crear una sala y una reserva en una base autorizada, comprobar la respuesta y limpiar sus datos. El despliegue debe aplicar migraciones pendientes antes de depender de columnas nuevas.

Ejemplo resuelto

Caso: crear una reserva para sala 2 entre 10:00 y 11:00. Entrada válida produce estado PENDING y una fila; endsAt igual a startsAt produce 400 y cero filas nuevas.

Datos UTC completos para una sala vacía:2026-01-03T10:00:00Z→11:00:00Z válida;10:00:00Z→10:00:00Z inválida. Exige fechas finitas y autorización de usuario/sala. Testea además dos creaciones concurrentes del MISMO intervalo: solo una puede ser confirmada según política de disponibilidad; PENDING no bloquea automáticamente si no lo definiste. En una prueba fallida revierte cambios propios de una base exclusiva, no borres todas las reservas de un staging compartido.

Pruébalo

  1. Prepara una base de prueba aislada.

  2. Inserta usuario y sala sintéticos.

  3. Ejecuta caso válido y cuenta filas.

  4. Ejecuta caso inválido y verifica que el conteo no cambia.

Comprueba tu resultado

Después de ambos casos existe exactamente una reserva válida y ninguna con duración cero.

Error frecuente: ejecutar pruebas contra una base compartida con datos reales. Corrígelo usando una base local o staging autorizado y limpieza explícita.

Ejercicio: parte de cero reservas; tras dos peticiones, una válida y otra inválida, el resultado esperado es una fila persistida y una respuesta 400.

Tablas de clientes y pedidos: INNER JOIN conserva coincidencias y LEFT JOIN conserva también a Luis sin pedidos.
CursaloMapa de práctica
Relacionar tablas sin perder filas

Una clave conecta cada pedido con su cliente. INNER JOIN devuelve las coincidencias y puede producir varias filas por cliente. LEFT JOIN conserva también los clientes sin pedido y representa los campos ausentes con NULL.

Ver la infografía en tamaño completo ↗

Tipo de lección: Video

Concepto clave

Las pruebas y el despliegue son la puerta de entrada a producción para cualquier aplicación backend. Imagina que estás construyendo un puente: el esquema y las migraciones son los planos, las queries son los materiales, pero las pruebas son los ensayos de carga que verifican que todo funcione bajo presión real. Sin este paso, estás lanzando al vacío.

En el contexto de Prisma ORM, las pruebas no solo validan la lógica de negocio, sino también la integración con la base de datos y el rendimiento de las queries. El despliegue, por su parte, implica configurar entornos, gestionar conexiones de base de datos y asegurar que las migraciones se ejecuten de forma segura y automática. Juntos, forman un ciclo que garantiza estabilidad y confiabilidad.

Cómo funciona en la práctica

Vamos a implementar un flujo completo de pruebas y despliegue para una API con Prisma. Primero, configuraremos un entorno de pruebas aislado usando una base de datos en memoria o contenedores Docker. Luego, escribiremos pruebas de integración que simulen operaciones reales. Finalmente, automatizaremos el despliegue con scripts que manejen migraciones y variables de entorno.

Paso a paso: 1) Configurar Jest o Vitest con Prisma Client mockeado para pruebas unitarias. 2) Usar Prisma Test Environment para bases de datos aisladas. 3) Escribir pruebas que cubran CRUD, relaciones y transacciones. 4) Crear scripts de despliegue que ejecuten migraciones y verifiquen la conexión. 5) Integrar con CI/CD como GitHub Actions o GitLab CI.

Código en acción

Configuración básica de pruebas con Jest y Prisma:

// jest.config.js
module.exports = {
  testEnvironment: 'node',
  setupFilesAfterEnv: ['/jest.setup.js'],
};

// jest.setup.js
const { PrismaClient } = require('@prisma/client');
const prisma = new PrismaClient();

beforeAll(async () => {
  // Conectar a base de datos de pruebas
  await prisma.$connect();
});

afterAll(async () => {
  // Limpiar y desconectar
  await prisma.$disconnect();
});

Ejemplo de prueba de integración para un endpoint de usuarios:

// tests/user.test.js
describe('User API', () => {
  it('debe crear un usuario y retornarlo con id', async () => {
    const userData = {
      name: 'Juan Pérez',
      email: 'juan@example.com',
    };

    // Antes: query simple pero ineficiente
    // const user = await prisma.user.create({ data: userData });

    // Después: query optimizada con select explícito
    const user = await prisma.user.create({
      data: userData,
      select: { id: true, name: true, email: true },
    });

    expect(user).toHaveProperty('id');
    expect(user.name).toBe(userData.name);
    expect(user.email).toBe(userData.email);
  });
});

Errores comunes

  • No aislar la base de datos de pruebas: Usar la misma base de datos de desarrollo o producción causa contaminación de datos. Solución: Configurar un entorno separado con variables de entorno o usar SQLite en memoria.
  • Olvidar limpiar datos entre pruebas: Las pruebas se vuelven interdependientes y frágiles. Solución: Usar hooks como beforeEach para truncar tablas o reiniciar la base de datos.
  • No probar transacciones: Las operaciones complejas con múltiples queries pueden fallar en producción. Solución: Escribir pruebas que simulen rollbacks y commits con Prisma $transaction.
  • Desplegar sin verificar migraciones: Ejecutar migraciones automáticamente sin backup puede causar pérdida de datos. Solución: Usar prisma migrate deploy con confirmación manual en producción.
  • Ignorar el rendimiento en pruebas: Las queries lentas no se detectan hasta producción. Solución: Incluir pruebas de carga con herramientas como k6 o medir tiempos de respuesta.

Checklist de dominio

  1. ¿Configuraste un entorno de pruebas aislado con su propia base de datos?
  2. ¿Escribiste pruebas de integración que cubran al menos el 80% de las operaciones CRUD?
  3. ¿Incluiste pruebas para transacciones y manejo de errores de base de datos?
  4. ¿Automatizaste la ejecución de migraciones en el proceso de despliegue?
  5. ¿Verificaste que las variables de entorno sean seguras y no estén hardcodeadas?
  6. ¿Probaste la conexión a la base de datos en el entorno de producción antes del lanzamiento?
  7. ¿Documentaste los pasos de despliegue y rollback en caso de fallos?

Implementar un pipeline de pruebas y despliegue para una API con Prisma

Sigue estos pasos para crear un sistema completo de pruebas y despliegue:

  1. Clona el repositorio base de la API (disponible en el enlace del curso) y examina la estructura existente.
  2. Configura un entorno de pruebas usando Jest y una base de datos SQLite en memoria. Asegúrate de que las variables de entorno apunten a esta base de datos solo durante las pruebas.
  3. Escribe al menos 5 pruebas de integración que cubran: creación de un recurso, lectura con filtros, actualización, eliminación y una transacción que involucre múltiples modelos.
  4. Crea un script de despliegue (deploy.sh o deploy.js) que: a) Verifique la conexión a la base de datos de producción, b) Ejecute las migraciones pendientes con confirmación manual, c) Reinicie el servidor de aplicación.
  5. Integra el pipeline con GitHub Actions: configura un workflow que ejecute las pruebas en cada push y despliegue automáticamente en la rama main después de aprobación.
Pistas
  • Usa el paquete @prisma/client para mockear Prisma en pruebas unitarias y evita tocar la base de datos real.
  • En el script de despliegue, incluye un paso de rollback que pueda revertir la última migración en caso de error.
  • Configura secrets en GitHub Actions para las variables de entorno de producción y nunca las commits al repositorio.

Evalua tu comprension

Completa el quiz interactivo de arriba para ganar XP.

Sigue con Prisma ORM Profesional: Schemas, Migraciones y Queries Optimizadas para Producción

Esta lección forma parte de un curso de Cursalo. Revisa su programa y elige entre la compra individual o el acceso a toda la escuela.

Si ya tenías acceso a este curso, entra con tu cuenta: tus derechos y tu progreso se conservan. No necesitas comprarlo de nuevo.

01 / ELEGIR UNA RUTA

El próximo paso

Aprende IA mientras construyes algo que sí necesitas.

Empieza por el curso inicial o explora el catálogo para encontrar una práctica alineada con tu trabajo.