Objetos Mock y Fixtures en JavaScript: cómo no volverse loco con las pruebas

Entrenador de Python en Línea para Principiantes

Aprende Python fácilmente sin sobrecargarte de teoría. Resuelve tareas prácticas con verificación automática, recibe pistas y escribe código directamente en el navegador, sin instalar nada.

Start Course

Objetos Mock y Fixtures en JavaScript: tu arsenal de pruebas

\n\n

Imagina que estás escribiendo un módulo que envía solicitudes a una API externa del clima. Ejecutas las pruebas y fallan porque la API no está disponible temporalmente. O peor aún: pruebas un sistema de pago y cada ejecución descuenta dinero real de la tarjeta. ¿Te suena familiar? Bienvenido al mundo donde los objetos mock y fixtures en JavaScript se convierten en tus mejores amigos.

\n\n

En este artículo no solo enumeraremos definiciones. Analizaremos cómo hacer que las pruebas sean rápidas, confiables e independientes del mundo exterior usando mocks, stubs y fixtures. Aprenderás cómo engañar a los temporizadores, suplantar solicitudes HTTP y preparar datos de prueba ideales. ¡Allá vamos!

\n\n

¿Para qué sirven los mock y fixtures? Dolor y salvación

\n\n

Cuando escribes pruebas unitarias en JavaScript, quieres verificar solo un módulo. Pero el código real a menudo depende de bases de datos, sistema de archivos, llamadas de red o números aleatorios. Sin mocks, cada prueba es una lotería: puede fallar por un tiempo de espera de red o porque el servidor devolvió datos incorrectos.

\n\n

Los objetos Mock son sustitutos de las dependencias reales. Imitan el comportamiento de los objetos originales, pero tú controlas completamente sus respuestas. Los Fixtures son conjuntos de datos preparados de antemano (por ejemplo, un JSON con la respuesta de una API) que introduces en las pruebas. Juntos te dan un superpoder: pruebas la lógica, no la infraestructura.

\n\n

Mock vs Stub vs Spy: aclarando los términos

\n\n

Antes de escribir código, pongamos orden en los términos. En el ecosistema de JavaScript (especialmente en Jest y Mocha), estos conceptos a veces se mezclan, pero las diferencias son importantes:

\n\n
    \n
  • Mock — un objeto que reemplaza una dependencia real y permite definir el comportamiento esperado. Le dices: «Cuando se llame al método getUser con id=5, devuelve el objeto {name: 'Alice'}».
  • \n
  • Stub — una versión simplificada del mock. Simplemente devuelve datos fijos, sin verificar cómo se le llamó. A menudo se usa para reemplazar funciones que devuelven valores aleatorios.
  • \n
  • Spy — un envoltorio sobre una función real. No cambia su comportamiento, pero registra cuántas veces se llamó, con qué argumentos y qué devolvió. Ideal para verificar efectos secundarios.
  • \n
\n\n

En la mayoría de los frameworks modernos (Jest, Sinon.js), los mocks pueden hacer de todo: tanto suplantar la implementación como espiar. Pero entender la diferencia te ayudará a escribir pruebas más significativas.

\n\n

Fixtures: cómo preparar datos de prueba

\n\n

Los fixtures en pruebas de JavaScript son simplemente datos que extraes en archivos o variables separadas. ¿Por qué es necesario? Primero, para no duplicar objetos JSON de 50 líneas en cada prueba. Segundo, para cambiar rápidamente los escenarios: un fixture para una respuesta exitosa, otro para un error.

\n\n

Ejemplo de un fixture simple para probar un módulo de gestión de usuarios:

\n\n
// fixtures/users.js\nexport const userAlice = {\n  id: 1,\n  name: 'Alice',\n  email: 'alice@example.com',\n  role: 'admin'\n};\n\nexport const userBob = {\n  id: 2,\n  name: 'Bob',\n  email: 'bob@example.com',\n  role: 'user'\n};\n\nexport const apiResponseSuccess = {\n  status: 200,\n  data: { users: [userAlice, userBob] }\n};\n\nexport const apiResponseError = {\n  status: 500,\n  message: 'Internal Server Error'\n};\n
\n\n

Ahora en las pruebas simplemente importamos estos objetos. Esto hace que el código sea más limpio y permite reproducir casos fácilmente: «¿Y si el servidor devolvió un 500?».

\n\n

Mock en Jest: ejemplos prácticos

\n\n

Jest es el framework de pruebas más popular para JavaScript. Está integrado en Create React App, Next.js y muchas otras herramientas. Veamos cómo crear objetos mock en Jest.

\n\n

Función Mock con jest.fn()

\n\n

Supongamos que tenemos una función que llama a un callback después de procesar datos

Blogs

Book Recommendations