Muchas fallas de integración no ocurren por errores en la lógica del programa, sino por problemas de configuración. Una URL incorrecta, una variable de entorno ausente, una credencial vencida o una dependencia externa mal apuntada pueden hacer fallar un flujo completo.
Las pruebas de integración deben ejecutarse en un ambiente donde la configuración sea clara, controlada y separada de producción. Además, deben permitir comprobar cómo se comporta el sistema cuando una dependencia externa responde correctamente, falla o no está disponible.
En este tema veremos cómo organizar configuración, variables de entorno y dependencias externas para reducir errores y obtener pruebas más confiables.
La configuración es el conjunto de valores que permiten que una aplicación se ejecute en un ambiente determinado. Estos valores pueden cambiar entre desarrollo, pruebas, staging y producción.
Ejemplos de configuración:
En integración, la configuración importa porque define con qué recursos reales o simulados se conectan los componentes.
Una variable de entorno es un valor que se define fuera del código y que la aplicación puede leer al ejecutarse. Se usan mucho para configurar aplicaciones sin modificar el código fuente.
Por ejemplo, una aplicación puede leer variables como:
DATABASE_URL: dirección de la base de datos.PAYMENTS_API_URL: URL del servicio de pagos.MAIL_ENABLED: indica si se enviarán correos reales.QUEUE_NAME: nombre de la cola usada para eventos.REQUEST_TIMEOUT: tiempo máximo de espera para llamadas externas.Las variables de entorno son útiles, pero deben manejarse con orden. Si faltan, tienen nombres distintos o apuntan al lugar incorrecto, las pruebas pueden fallar de forma confusa.
Una aplicación suele ejecutarse en varios ambientes. Cada ambiente necesita valores propios.
| Ambiente | Uso | Ejemplo de configuración |
|---|---|---|
| Desarrollo | Trabajo local del equipo. | Base local y servicios simulados. |
| Pruebas | Ejecución controlada de pruebas. | Base de datos de prueba y colas separadas. |
| Staging | Ambiente parecido a producción. | Servicios externos en modo sandbox. |
| Producción | Uso real por usuarios. | Datos reales, credenciales reales y servicios productivos. |
Las pruebas de integración deben usar configuración de prueba. Usar valores de producción por error puede causar daños reales.
Los errores de configuración suelen ser simples, pero su impacto puede ser alto.
Ejemplos frecuentes:
Una prueba de integración puede detectar estos problemas cuando intenta conectar componentes en condiciones controladas.
Una buena práctica es validar la configuración al iniciar la aplicación o antes de ejecutar la suite de pruebas. Esto permite fallar rápido con un mensaje claro si falta algo importante.
Conviene validar:
Algunas configuraciones contienen información sensible, como contraseñas, tokens o claves de API. Esos valores deben tratarse como secretos.
Cuidados importantes:
Una prueba de integración no debería necesitar credenciales productivas para verificar el comportamiento del sistema.
Una dependencia externa es un sistema fuera del componente o de la aplicación que estamos probando, pero que participa en el flujo. Puede pertenecer a otro equipo, a otra empresa o a una infraestructura compartida.
Ejemplos:
Estas dependencias agregan riesgo porque no siempre están bajo control directo del equipo que escribe la prueba.
Hay varias formas de trabajar con dependencias externas en pruebas de integración:
| Enfoque | Descripción | Cuándo sirve |
|---|---|---|
| Servicio real | La prueba usa la dependencia verdadera. | Cuando necesitamos máxima confianza y el ambiente es seguro. |
| Sandbox | Se usa una versión de prueba del proveedor. | Pagos, facturación o servicios externos con modo de pruebas. |
| Simulación | Un servicio controlado responde como la dependencia. | Cuando necesitamos estabilidad, velocidad y control de respuestas. |
| Fake local | Implementación simple que imita una parte del comportamiento. | Cuando solo necesitamos verificar una colaboración específica. |
Usar servicios reales puede aumentar la confianza, pero también tiene riesgos:
Por eso, antes de usar un servicio real, conviene preguntarse si realmente forma parte del objetivo de esa prueba.
Simular dependencias permite controlar la prueba, pero si simulamos demasiado podemos perder realismo. Una simulación mal diseñada puede aceptar datos que el servicio real rechazaría o devolver respuestas que nunca ocurren.
Riesgos de simular en exceso:
La simulación debe mantenerse alineada con el contrato real de la dependencia.
Las dependencias externas pueden tardar, fallar o responder de forma intermitente. Por eso la configuración suele incluir timeouts, reintentos y mecanismos de protección.
En una prueba de integración puede ser útil verificar:
Estos casos ayudan a comprobar que la integración no solo funciona en el camino exitoso.
Un ambiente de pruebas debe estar protegido contra errores peligrosos. Algunas medidas útiles son:
Estas medidas reducen el riesgo de que una prueba modifique o invoque recursos reales accidentalmente.
Supongamos una prueba de integración para confirmar una compra. Una configuración de prueba podría ser:
| Valor | Ejemplo | Propósito |
|---|---|---|
APP_ENV |
test |
Indicar que se ejecuta en modo prueba. |
DATABASE_URL |
db_test |
Usar una base aislada. |
PAYMENTS_API_URL |
http://localhost:9001 |
Apuntar a un servicio de pagos simulado. |
MAIL_ENABLED |
false |
Evitar envíos reales. |
ORDER_EVENTS_QUEUE |
orders_test |
Usar una cola separada para eventos de prueba. |
Antes de ejecutar pruebas de integración, conviene revisar:
La configuración, las variables de entorno y las dependencias externas son puntos críticos en las pruebas de integración. Si no se controlan bien, pueden generar fallas difíciles de interpretar o, peor aún, efectos sobre recursos reales.
Un ambiente bien configurado permite ejecutar pruebas repetibles, seguras y útiles para detectar problemas de colaboración entre componentes.
En el próximo tema trabajaremos sobre datos de prueba para integración, otro elemento esencial para obtener resultados confiables.