Chuck's Academy

Testing en Node.js con Mocha y Chai

Testing de Funciones Asíncronas

En el desarrollo de aplicaciones Node.js, es muy común trabajar con funciones asíncronas que manejan operaciones como lecturas/escrituras de archivos, solicitudes HTTP, y accesos a bases de datos. Probar estas funciones puede ser más complejo que probar funciones sincrónicas, pero Mocha y Chai facilitan este proceso con su soporte para pruebas asíncronas. En este capítulo, aprenderás cómo escribir y ejecutar pruebas para funciones asíncronas utilizando Mocha y Chai.

Métodos para Probar Funciones Asíncronas

Existen varias maneras de probar funciones asíncronas en Mocha:

  1. Callbacks
  2. Promises
  3. async/await

Utilizando Callbacks

Mocha detecta automáticamente que una función de prueba es asíncrona cuando ésta toma un argumento done. Este argumento es una función que debe ser llamada cuando la prueba ha terminado, indicando a Mocha que puede proceder a la siguiente prueba.

Ejemplo con Callback:
javascript

Utilizando Promises

Mocha también soporta el retorno de Promises desde una prueba. Si la Promise es resuelta, la prueba pasa. Si la Promise es rechazada, la prueba falla.

Ejemplo con Promises:
javascript

Utilizando async/await

El uso de async/await es una forma más moderna y legible de manejar la asincronía en JavaScript. Al combinar esto con Mocha, las pruebas se vuelven intuitivas y fáciles de mantener.

Ejemplo con async/await:
javascript

Ejemplo Completo de Pruebas Asíncronas

Supongamos que tenemos una función obtenerDatosDeAPI que hace una solicitud HTTP a una API externa para obtener datos. Queremos probar esta función sin realizar solicitudes reales a la API.

Implementación de obtenerDatosDeAPI:

javascript

Prueba de obtenerDatosDeAPI con Stub:

Podemos utilizar Sinon.js para crear un stub de axios.get y devolver datos falsos durante la prueba.

javascript

Consideraciones Finales

  • Gestión de Errores: Asegúrate de probar no solo casos de éxito, sino también cómo tu función maneja los errores.
  • Limpieza: Utiliza hooks globales (before, after) y hooks internos (beforeEach, afterEach) para configurar y limpiar el entorno de pruebas.
  • Tiempo de Espera: Si tus pruebas dependen de temporizadores o tiempo de espera, considera usar herramientas como sinon para controlar el tiempo.

Resumen

Probar funciones asíncronas es esencial para aplicaciones Node.js robustas y fiables. Ya sea utilizando callbacks, Promises, o async/await, Mocha y Chai hacen que este proceso sea sencillo y eficiente. Combina estas técnicas con stubs y mocks de Sinon.js para pruebas más controladas y efectivas. En el próximo capítulo, exploraremos cómo realizar pruebas de APIs RESTful.


Pregúntame lo que sea