Uso de Mocks en Testing de Software

Clase 7 de 20Curso de React Testing Library

Contenido del curso

Resumen

Cuando tus tests dependen de servicios externos como APIs o bases de datos, te expones a los temidos flaky tests o tests inestables. Si el servicio externo está caído al momento de ejecutar tus pruebas, todo falla sin que sea culpa de tu código. Para resolver este problema existen los mocks, una de las herramientas más poderosas en el mundo del testing.

¿Qué es un mock y por qué se compara con un doble de acción?

Un mock funciona como un doble de acción en una película: se parece mucho al actor real, pero no es el actor real. En testing, un mock simula el comportamiento de un objeto, función o módulo para que puedas probar tu código sin depender de elementos externos [0:25].

Existen varios tipos de mocks que puedes aplicar según la situación:

  • Mocks de constantes o variables: son datos que utilizas en tus tests, pero que no provienen de servicios externos reales. Tú defines qué datos fluyen en la prueba [0:40].
  • Mocks de funciones: cuando envías una función simulada para validar que se llame correctamente. Por ejemplo, enviar una función al onclick de un botón y verificar que se ejecute [0:52].
  • Mocks de módulos: reemplazan un módulo completo que importas en tu ambiente de testing. Puedes simular una base de datos completa sin conectarte a la real [1:10].
  • Mocks de promesas: permiten controlar el resultado de operaciones asíncronas en JavaScript. Defines si la promesa se cumple o no, y validas el comportamiento en ambos casos [1:25].

¿Cuándo deberías usar mocks en tus tests?

No siempre es necesario mockear. Hay tres escenarios específicos donde los mocks brillan:

  • Dependencias externas: si tu código consume una API o se conecta a una base de datos, mockea esa conexión. La idea es no depender de nadie para que tus pruebas funcionen [1:50].
  • Comportamientos no deterministas: imagina un software que valida fechas. Hoy funciona, mañana no. Mockear estas situaciones garantiza consistencia en los resultados [2:05].
  • Eficiencia: si necesitas hacer múltiples llamados a APIs o procesar muchas imágenes, el costo en tiempo es alto. Nadie quiere esperar dos minutos para que corran los tests [2:18].

¿Cuáles son los beneficios concretos de mockear?

Al implementar mocks correctamente obtienes ventajas claras:

  • Tests más rápidos: al no depender de servicios externos, todo corre con mayor velocidad.
  • Resultados consistentes: como tú configuras los datos, sabes exactamente qué esperar.
  • Control total del ambiente: todo está en tus manos, no dependes de terceros.
  • Pruebas de casos edge: puedes simular escenarios muy específicos sin configuraciones complejas [2:35].

¿Qué riesgos tiene el uso excesivo de mocks?

Los mocks también tienen advertencias importantes que debes considerar:

  • Demasiados mocks generan fragilidad: si mockeas absolutamente todo y tu software cambia, tus tests no van a reflejar el comportamiento real [3:05].
  • Mocks incorrectos crean falsa confianza: si un endpoint espera una key con "nombre" y tú mockeaste "apellido", el test pasa pero no prueba nada útil [3:15].
  • Sobremockear oculta casos reales: al simular todo, pierdes la oportunidad de detectar problemas que solo aparecen con datos y conexiones reales [3:30].

La regla de oro es clara: usa mocks con sabiduría, no por conveniencia. Un mock es una simulación que existe en tu ambiente de test pero no representa la realidad de tu aplicación. Encontrar el balance entre lo que mockeas y lo que pruebas con datos reales es lo que separa un buen test suite de uno que solo da una ilusión de seguridad.

¿Has tenido problemas con flaky tests en tus proyectos? Comparte tu experiencia y cómo los resolviste.