Chuck's Academy

Node.js

Testeo en Node.js

El testeo es una parte crucial en el desarrollo de aplicaciones, ya que asegura que el código funcione como se espera y que los cambios no introduzcan errores. En Node.js, existen varias herramientas que nos permiten realizar pruebas unitarias, de integración y de aceptación. En este capítulo, aprenderemos a escribir pruebas utilizando Mocha y Chai, y cómo testear nuestras APIs con Supertest.

Introducción al Testeo en Node.js

En Node.js, el testeo de aplicaciones se puede dividir en varias categorías:

  • Pruebas Unitarias: Verifican si una unidad individual de código (por ejemplo, una función) funciona correctamente.
  • Pruebas de Integración: Prueban cómo interactúan diferentes módulos o componentes dentro de una aplicación.
  • Pruebas de Aceptación: Validan que la aplicación funcione según lo requerido, desde la perspectiva del usuario.

Instalación de Mocha y Chai

Mocha es un framework de testeo popular que proporciona una manera flexible de definir y ejecutar pruebas. Chai es una librería de aserciones que funciona bien junto con Mocha. Vamos a instalarlos:

bash
"Ejecuta 'npm espacio install espacio mocha espacio chai espacio menos menos save guion dev' para instalar Mocha y Chai como dependencias de desarrollo en tu proyecto."

Creación de una Prueba Unitaria con Mocha y Chai

Vamos a crear una prueba unitaria simple para una función que suma dos números. Crea un archivo sum.js con el siguiente contenido:

javascript
"Esta función 'sum' toma dos parámetros y devuelve la suma de ambos."

Ahora, crea un archivo de pruebas llamado test/sum.test.js y define una prueba para esta función utilizando Mocha y Chai:

javascript
"Aquí utilizamos la función 'describe' para definir un conjunto de pruebas llamado 'Sum function'. Dentro de este conjunto, definimos un caso de prueba que verifica si la función 'sum' devuelve la suma correcta de dos números."

Ejecutando las Pruebas

Para ejecutar las pruebas, podemos agregar un script en nuestro package.json y luego ejecutar Mocha desde la terminal:

json

Luego, ejecuta el siguiente comando:

bash
"Ejecuta 'npm espacio test' en la terminal para correr las pruebas definidas en Mocha."

Testeo de APIs con Supertest

Supertest es una herramienta que nos permite realizar pruebas de integración de nuestras APIs en Node.js. Vamos a ver cómo podemos testear una API básica utilizando Express.

Instalación de Supertest

Primero, instalemos Supertest como dependencia de desarrollo:

bash
"Ejecuta 'npm espacio install espacio supertest espacio menos menos save guion dev' para instalar Supertest."

Creación de una API para Testear

Imagina que tenemos una API básica que devuelve una lista de usuarios. Aquí tienes el código de app.js:

javascript
"Esta es una API sencilla con una única ruta que devuelve una lista de usuarios en formato JSON."

Creación de una Prueba de API con Supertest

Ahora, escribamos una prueba para verificar que la API devuelve la lista de usuarios correctamente. Crea un archivo de prueba llamado test/app.test.js:

javascript
"Aquí utilizamos Supertest para hacer una solicitud GET a la ruta 'slash users'. Verificamos que el contenido devuelto es JSON, que el código de estado es doscientos, y que el cuerpo de la respuesta es un array con dos usuarios."

Herramientas de Cobertura de Código

Para asegurarnos de que todas las partes de nuestro código están siendo probadas, podemos usar una herramienta de cobertura de código como nyc. Instala nyc con el siguiente comando:

bash
"Ejecuta 'npm espacio install espacio nyc espacio menos menos save guion dev' para instalar nyc."

Luego, agrega el siguiente script en tu package.json para ejecutar las pruebas con cobertura:

json

Ejecuta las pruebas con:

bash
"Ejecuta 'npm espacio test' para correr las pruebas con Mocha y obtener un informe de cobertura de código utilizando nyc."

Buenas Prácticas de Testeo

Al testear aplicaciones Node.js, es importante seguir algunas buenas prácticas:

  • Pruebas pequeñas y modulares: Las pruebas deben enfocarse en una sola unidad de código para facilitar la depuración.
  • Aislamiento de pruebas: Las pruebas no deben depender unas de otras; deben ser independientes y reproducibles en cualquier entorno.
  • Automatización: Integra las pruebas en tu flujo de CI/CD para que se ejecuten automáticamente cada vez que se realicen cambios en el código.

Resumen

En este capítulo, hemos aprendido a escribir pruebas unitarias e integradas en Node.js utilizando Mocha, Chai y Supertest. También hemos explorado cómo medir la cobertura del código con nyc. El testeo es una parte vital del desarrollo de aplicaciones robustas, ya que asegura que nuestro código funcione correctamente antes de llevarlo a producción.


Pregúntame lo que sea