Por qué deberías usar mockReturnThis en Jest

| Última modificación: 15 de noviembre de 2024 | Tiempo de Lectura: 3 minutos

Algunos de nuestros reconocimientos:

Premios KeepCoding

Cuando se trata de escribir pruebas para tu código JavaScript, necesitas un marco de pruebas que sea robusto y flexible. Esto te lo ofrece mockReturnThis en Jest, un marco de pruebas JavaScript que está lleno de características, incluyendo las funciones mock, que nos permiten aislar y probar funciones individuales de manera efectiva.

Cuando estás probando tus programas, es común encontrar funciones que dependen de this, es decir, del contexto en el que se ejecutan. En algunos casos, ese contexto puede cambiar, lo que podría hacer que las pruebas sean algo complicadas. Ahí es donde entra mockReturnThis en Jest, una herramienta única que te facilitará el trabajo como desarrollador.

¿Qué es mockReturnThis?

mockReturnThis es un método en Jest que te permite establecer un valor predeterminado para this cuando se llama a una función mock. Este método puede ser extremadamente útil en una variedad de situaciones, especialmente cuando estás trabajando con funciones que dependen del contexto de this.

Contexto dinámico con mockReturnThis

Una de las grandes ventajas de mockReturnThis es la capacidad de proporcionar un contexto dinámico en tus pruebas. Imagina que estás probando un objeto con un método que utiliza this. En lugar de tener que configurar un objeto de prueba con propiedades específicas cada vez que quieres probar este método, puedes simplemente usar mockReturnThis para que Jest se encargue de eso por ti.

Por ejemplo, supón que tienes una función que utiliza this:

function greet() {
    return `Hello, ${this.name}!`;
}

Con esta herramienta puedes probar fácilmente esta función en diferentes contextos:

test('greet function', () => {
    const mock = jest.fn().mockReturnThis();
    
    // establecer 'this' a un objeto con la propiedad 'name'
    mock.mockReturnThis({ name: 'Alice' });
    expect(mock().greet()).toBe('Hello, Alice!');

    // cambiar 'this' por un objeto diferente
    mock.mockReturnThis({ name: 'Bob' });
    expect(mock().greet()).toBe('Hello, Bob!');
});

De esta forma, puedes probar fácilmente cómo funciona tu función con diferentes contextos sin tener que rescribir tus pruebas cada vez.

Ejemplo práctico

Supón que estás desarrollando una aplicación de gestión de contactos y tienes un objeto Contacto con un método saludar que utiliza this para referirse al nombre del contacto:

class Contacto {
  constructor(nombre) {
    this.nombre = nombre;
  }

  saludar() {
    return `¡Hola, ${this.nombre}!`;
  }
}

Quieres probar el método saludar, pero necesitas controlar el valor de this.nombre para hacerlo. Esto podría ser complicado si estás creando y manipulando instancias del objeto Contacto. Por eso, Jest tiene una función que hace este trabajo más fácil.

mockReturnThis en Jest te permite establecer this para tus funciones mock de manera sencilla y directa, lo que te da el control que necesitas para tus pruebas.

Volviendo al ejemplo anterior, puedes probar el método saludar de la siguiente manera:

test('El método saludar devuelve un saludo correcto', () => {
  const mock = jest.fn(Contacto.prototype, 'saludar').mockReturnThis();
  
  mock.mockReturnThis({ nombre: 'María' });
  expect(mock().saludar()).toBe('¡Hola, María!');

  mock.mockReturnThis({ nombre: 'Pedro' });
  expect(mock().saludar()).toBe('¡Hola, Pedro!');
});

Como puedes ver, esta herramienta hace que las pruebas de funciones que dependen de this sean mucho más manejables. Esto no solo facilita la escritura de tus pruebas, sino que también te ayuda a asegurarte de que estás probando tu código de la forma más precisa y completa posible.

¿Quieres saber más?

mockReturnThis es una herramienta extremadamente útil en tu arsenal de pruebas Jest. Esta función no sólo hace que tus pruebas sean más flexibles, sino que también te permite probar tu código con mayor precisión. Cuando lo utilizas, puedes asegurarte de que estás probando tu función exactamente en el contexto que debería estar. Esto es particularmente útil cuando estás probando funciones que están diseñadas para ser utilizadas como métodos de un objeto.

Si quieres seguir aprendiendo sobre este tema y muchos más, no te pierdas nuestro Desarrollo Web Full Stack Bootcamp en KeepCoding, la formación intensiva con la que, en pocos meses, obtendrás las habilidades necesarias para entrar en el emocionante y lucrativo mundo del desarrollo web. ¡Solicita información y empieza tu viaje hacia una nueva y emocionante carrera hoy mismo!

Alberto Casero

Alberto Casero es CTO en Watium, Fundador de Kas Factory & Coordinador del Bootcamp en Desarrollo Web.

Posts más leídos

¡CONVOCATORIA ABIERTA!

Desarrollo Web

Full Stack Bootcamp

Clases en Directo | Profesores en Activo | Temario 100% actualizado