Skip to content

REC-197: Implementa entorno de testing con contenedores#86

Open
ma7payne wants to merge 1 commit intomasterfrom
REC-197
Open

REC-197: Implementa entorno de testing con contenedores#86
ma7payne wants to merge 1 commit intomasterfrom
REC-197

Conversation

@ma7payne
Copy link

@ma7payne ma7payne commented Mar 3, 2026

Requerimiento

https://proyectos.andes.gob.ar/browse/REC-197

Funcionalidad desarrollada

  1. Se creó un entorno completo de pruebas de integración centrado principalmente en la creación de recetas, apoyándose en contenedores de bases de datos temporales (testcontainers) y supertest para peticiones HTTP.
  2. Se implementó un script de configuración global para Jest que orquesta una base de datos de prueba limpia en tests/setup.ts.
  3. En tests/integration/app-test-helper.ts se ha emulado el servidor Express para ser consumido en los tests.
  4. En tests/integration/prescription/prescription.create.test.ts se escribió un conjunto de validaciones sobre el endpoint de creación de prescripciones.

Warning

El archivo testing-guide.md contiene el prompt institucional que el agente necesita para elaborar los test de manera reglamentaria. Se debe asignar al modelo/gestor que se esté utilizando para escribir código con IA.

Instrucciones

Para ejecutar las pruebas de integración en este proyecto, tienes dos enfoques principales gracias a la configuración de testcontainers que hemos revisado.

Paso a paso detallado:

Opción 1: Ejecución Rápida (Recomendada para desarrollo continuo)

Este enfoque levanta una base de datos de prueba en segundo plano y la mantiene viva. Esto hace que ejecutar los tests múltiples veces sea mucho más rápido porque no tiene que levantar y apagar un contenedor de Docker cada vez.

Paso 1: Levantar el entorno de pruebas Abre una terminal en la raíz de tu proyecto e inicia el contenedor de MongoDB para testing:

npm run test:containers:up

ℹ️ Nota: Este comando iniciará un contenedor de Docker con MongoDB y creará (o actualizará) el archivo .testcontainers.env con la cadena de conexión. Además, ejecutará el script de "seeding" para insertar usuarios de prueba.

Paso 2: Dejar esa terminal corriendo El script anterior se quedará ejecutándose. Déjalo abierto en esa pestaña de la terminal.

Paso 3: Ejecutar los tests Abre otra pestaña o ventana de la terminal en la misma carpeta del proyecto y ejecuta:

npm run test

Como la configuración (tests/setup.ts) detectará que el archivo .testcontainers.env existe, Jest utilizará la base de datos que ya está corriendo, haciendo que la ejecución de las pruebas sea inmediata. Puedes correr este comando todas las veces que quieras mientras desarrollas.

Paso 4: Apagar el entorno (al terminar) Cuando hayas terminado de programar por el día, vuelve a la primera terminal y presiona Ctrl + C. Esto detendrá el contenedor de MongoDB y limpiará automáticamente el archivo .testcontainers.env.

Opción 2: Ejecución Efímera (Ideal para CI/CD o pruebas de una sola vez)

Si solo quieres correr los tests una vez para validar que todo funcione y no te importa esperar un poco más, puedes dejar que Jest y Testcontainers manejen el ciclo de vida completo de la base de datos automáticamente.

Paso único: Ejecutar Jest directamente Asegúrate de no tener el script test:containers:up corriendo y simplemente ejecuta:

npm run test

  1. Lo que sucederá internamente: Jest detectará que no hay un contenedor local guardado en .testcontainers.env.
  2. Se descargará (si no la tienes) y levantará una imagen de mongo:4.4 de forma temporal.
  3. Se ejecutarán todos tus tests de integración (prescription.create.test.ts, etc.).
    Al finalizar la suite de pruebas, vaciará la base de datos y destruirá el contenedor de Docker para no consumir recursos en tu PC.

Consideraciones sobre Docker
Dado que el proyecto utiliza testcontainers para levantar instancias de MongoDB sobre la marcha, es un requisito indispensable tener Docker Desktop (o el motor de Docker) instalado y ejecutándose en tu máquina (Windows) antes de correr cualquiera de estos comandos.

Ilustración de la arquitectura completa

Gemini_Generated_Image_let4e7let4e7let4

UserStories llegó a completarse

  • Si
  • No

Requiere actualizaciones en la base de datos

  • Si
  • No

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant