Buenas prácticas en pruebas con Jest y manejo de ciclos abiertos

Clase 6 de 25Curso de End to End Testing para APIs REST con Node.js

Resumen

¿Cómo manejar ciclos abiertos en pruebas de end to end?

Cuando trabajamos con pruebas de tipo end to end, es crucial saber cómo manejar los ciclos que quedan abiertos. Al no gestionar adecuadamente estos procesos, podríamos enfrentarnos a problemas como la no terminación de nuestras pruebas o un consumo innecesario de recursos. A continuación, exploraremos herramientas y enfoques que nos ayudarán a manejar estos ciclos de manera efectiva.

¿Cómo utilizamos beforeEach y afterEach en Jest?

Al trabajar en un entorno de pruebas, es fundamental utilizar adecuadamente los hooks de Jest para configurar y limpiar nuestros ciclos. Implementar beforeEach y afterEach nos permitirá gestionar de manera efectiva la ejecución y cierre de nuestros servidores durante las pruebas.

Configuración inicial con beforeEach

Antes de cada prueba, necesitaremos configurar el servidor para que esté disponible y listo para recibir solicitudes. Esto se logra con el uso del hook beforeEach de Jest, donde configuraremos nuestro entorno de pruebas.

let app, server, api;

beforeEach(() => {
  // Inicializar y poner en marcha el servidor
  app = configurarAplicacion();
  server = app.listen(3000, () => console.log('App listening'));
  api = supertest(app); // Usando SuperTest para pruebas de API
});

Limpieza con afterEach

Para asegurar que no quede ningún proceso corriendo, utilizamos el hook afterEach. Con este, nos encargamos de cerrar el servidor después de cada conjunto de pruebas.

afterEach(() => {
  server.close(() => console.log('Server closed'));
});

¿Cómo detectar ciclos abiertos con detect open handles?

El comando detect open handles es una herramienta poderosa para identificar qué procesos o manejadores están abiertos en nuestro entorno de pruebas. Al ejecutarlo, obtenemos un vistazo de los procesos que podrían estar causando problemas, como quedarse abiertos de manera indefinida.

Ejecución del comando

Para ejecutarlo, añadimos la opción correspondiente al correr nuestras pruebas:

jest --detectOpenHandles

Esta práctica nos ayuda a identificar áreas problemáticas en nuestro código que requieren atención y cierre adecuado.

¿Qué es el force exit y cuándo usarlo?

El comando force exit es una medida drástica para cerrar los procesos abiertos. Es útil especialmente en escenarios de automatización y en entornos de integración continua donde no podemos dejar que un proceso se prolongue indefinidamente.

Uso en integración continua

En servicios como Github Actions, el tiempo y recursos son críticos, ya que se cobra por uso. Aquí es donde force exit resulta invaluable para forzar el cierre de los ciclos al finalizar las pruebas:

jest --forceExit

Esto asegura que nuestras pruebas no malgasten valiosos recursos ejecutándose de manera interminable.

¿Qué medidas debemos tomar para evitar ciclos abiertos?

Adoptar buenas prácticas ayuda a prevenir problemas de ciclos abiertos:

  • Utilizar hooks de Jest: beforeEach para inicializar y afterEach para limpiar.
  • Implementar detect open handles: Identificar y solucionar problemas proactivamente.
  • Forzar cierre cuando sea necesario: Especialmente en entornos de CI/CD donde los recursos son limitados.

Con estas prácticas en mente, garantizaremos un entorno de pruebas más eficiente y libre de problemas. ¡Sigue explorando y aprendiendo! El manejo adecuado de recursos optimiza tanto el desarrollo como la integración en tus proyectos.