Requisitos

1

Pruebas End-to-End para APIs con Node.js y Express

Introducción: pruebas e2e con Node.js

2

Pruebas de API con Insomnia y Postman: Exploración y Configuración

3

Pruebas Unitarias en Node.js con Jest y SQLite

4

Configuración de Jest para Pruebas End-to-End en JavaScript

5

Pruebas E2E en Node.js con Supertest y Express

6

Pruebas Unitarias Efectivas con Jest y Buenas Prácticas

Pruebas a la API de Fake Store

7

Configuración de pruebas E2E en Node.js con Twen.js

8

Generación de Reporte de Cobertura con Pruebas End-to-End

9

Pruebas de validación de datos con DTOs y Joy en Node.js

10

Pruebas End-to-End para APIs con Base de Datos Real

11

Pruebas End-to-End con Jest y Supertest en Node.js

12

Pruebas de API: Autenticación con Headers y API Key

13

Pruebas de Rutas Protegidas con Access Token en Node.js

14

Pruebas Efectivas de Endpoints y Bases de Datos en Proyectos POS

Pruebas en Entornos de Desarrollo Avanzados

15

Pruebas End-to-End con Semillas de Datos en APIs

16

Configuración Docker para Pruebas: Base de Datos Postgres

17

Semillas de Información en SQLite para Pruebas End-to-End

18

Creación de sets de datos en SQLite: Uso y organización efectiva

19

Automatización de Seed Data con Unsock en Entornos de Pruebas

20

Pruebas de JWT y Roles en Node.js

21

Pruebas E2E en Node.js para APIs RESTful

22

Pruebas de Paginación con Query Params en Endpoints de API

Mocking y automatización

23

Mocking de Servicios Externos con NodeMailer

24

Automatización de Pruebas con GitHub Actions y Node.js

Próximos pasos

25

Pruebas Punto a Punto con Node.js para APIs

No tienes acceso a esta clase

¡Continúa aprendiendo! Únete y comienza a potenciar tu carrera

Mocking de Servicios Externos con NodeMailer

23/25
Recursos

¿Qué es el mocking y por qué es importante en las pruebas?

El uso de mocking se convierte en una herramienta esencial al realizar pruebas de aplicaciones complejas, especialmente cuando se trabajan con servicios externos que escapan a nuestro control. En el testing de software, el mocking permite simular el comportamiento de ciertos componentes o servicios para verificar cómo la aplicación responde a diversas condiciones sin depender de servicios externos reales.

¿Por qué necesitamos hacer mocking?

Durante la ejecución de pruebas end-to-end, tratamos de integrar la mayor cantidad de componentes posibles de nuestra aplicación, incluyendo bases de datos y servicios externos. Sin embargo, llega un punto en el que no es factible o posible asegurar toda la funcionalidad de estos servicios de terceros, como es el caso de APIs externas o servicios de correo electrónico.

Razones para usar mocking:

  • Control limitado: APIs externas o servicios como NodeMailer para el envío de correos electrónicos no están bajo nuestro control directo, lo que complica la validación de su correcta ejecución.
  • Consumo de recursos: Llamar frecuentemente a servicios de terceros, como tecnología de procesamiento de imágenes de Microsoft, puede aumentar costos innecesarios si se usan sin restricciones.
  • Pruebas intencionadas: Utilizar datos falsos para simular condiciones específicas y verificar la respuesta de la aplicación, sin involucrar servicios reales que podrían causar un mal uso.

¿Cómo funciona el mocking con NodeMailer?

Un caso práctico de mocking se da al trabajar con la función NodeMailer, la cual gestiona el envío de correos electrónicos, como se describió en el ejemplo de recuperación de contraseñas. Al enviar un correo para recuperar una contraseña, no se puede verificar si el correo llegó con éxito, ya que no tenemos acceso a la base de datos de servicios como Gmail. Por lo tanto, emulamos mediante mocking que el correo ha sido enviado.

Implementación del mocking:

  1. Definición del EndPoint: La aplicación recibe un email para verificar si el usuario existe y firma un JWT que se guardará en la base de datos para el proceso de recuperación de contraseña.

  2. Envío de Email: Aquí reside el mayor desafío, ya que no podemos confirmar la entrega del correo en Gmail. Simularemos esta acción asegurando que supuestamente se ha enviado con éxito.

Código de Mocking:

// Definimos la funcionalidad de mocking en Jest
const mockSendMail = jest.fn();
jest.mock('nodemailer', () => {
  return {
    createTransport: jest.fn().mockImplementation(() => {
      return {
        sendMail: mockSendMail
      };
    })
  };
});

// Simulamos el comportamiento esperado
mockSendMail.mockResolvedValue(true);

¿Qué hacer si las pruebas fallan?

Al ejecutar pruebas, hemos de asegurarnos que las funciones simuladas estén siendo llamadas correctamente. En caso de errores, como en las credenciales de SMTP, es crucial que las pruebas no se detengan, ya que están diseñadas para ser independientes del correo electrónico real.

Uso de console.log para depuración

El console.log sigue siendo una herramienta valiosa cuando necesitamos comprender la salida de nuestras pruebas, especialmente para identificar dónde se están produciendo los errores. Esto ayuda no solo a encontrar errores en mi código, sino también en mi lógica de pruebas:

console.log(body); // Ayuda a depurar

¿Qué sigue después de implementar el mocking?

Una vez que hemos asegurado que nuestras pruebas funcionan eficientemente mediante mocking, podemos avanzar hacia la automatización de pruebas en plataformas como GitHub Actions. Esto nos permitirá ejecutar nuestras pruebas con cada cambio en el código de manera eficiente, garantizando siempre la calidad y estabilidad de nuestra aplicación.

Aportes 1

Preguntas 0

Ordenar por:

¿Quieres ver más aportes, preguntas y respuestas de la comunidad?

Algo que me gusta hacer en clases que pueden ser un poco más difíciles de entender o son de temas un poco más avanzados, es que le pido a Chat GPT y Gemini que me expliquen el código de la clase. Así puedo tener un mejor entendimiento de lo que está pasando, y me resulta muy útil. Te invito a hacer lo mismo si algún código suele ser complicado para ti :D Al final se trata de seguir aprendiendo.