Volver

Unit Testing en React Native usando Jest

El desarrollo de aplicaciones móviles requiere garantizar que cada componente funcione de manera correcta y predecible. En este contexto, el Unit Testing (pruebas unitarias) se vuelve una práctica indispensable para equipos de desarrollo mobile. En aplicaciones React Native, Jest se posiciona como el framework de testing ideal: rápido, sencillo y perfectamente integrado.

A continuación te mostraremos cómo hacer Unit Testing en React Native usando Jest, buenas prácticas, ejemplos funcionales, y por qué apostar a las pruebas automatizadas puede acelerar la entrega de productos de calidad.

¿Qué es Unit Testing y por qué importa en React Native?

El Unit Testing se centra en probar unidades individuales de código (funciones, componentes, hooks) de manera aislada. El objetivo es verificar que cada unidad se comporte como se espera bajo diferentes condiciones.

En proyectos React Native, los tests unitarios permiten:

  • Detectar errores rápidamente durante el desarrollo.
  • Facilitar refactorizaciones seguras.
  • Mejorar la calidad del software y la confianza en el producto.
  • Agilizar el feedback en entornos de integración continua (CI/CD).

¿Por qué usar Jest para Unit Testing en React Native?

Jest es el framework de testing oficial recomendado por React Native. Algunas de sus principales ventajas son:

  • Mínima configuración: listo para usar desde el inicio.
  • Snapshots: permite capturar y comparar representaciones del renderizado.
  • Mocks automáticos: facilita la simulación de módulos y funciones.
  • Velocidad: ejecuta tests en paralelo, optimizando los tiempos.
  • Cobertura de código: genera reportes claros de qué parte del código está testeada.

Configuración de Jest en un proyecto React Native

Si estás creando un proyecto nuevo con npx react-native init, Jest ya viene preconfigurado.

Para proyectos existentes o personalizados:

npm install --save-dev jest @testing-library/react-native

Agregá (o revisá) en tu package.json:

"jest": {
  "preset": "react-native",
  "setupFilesAfterEnv": ["@testing-library/jest-native/extend-expect"],
  "transformIgnorePatterns": [
    "node_modules/(?!(@react-native|react-native|react-navigation)/)"
  ]
}

Primeros ejemplos de Unit Testing con Jest en React Native

Testeando una función simple

Supongamos que tenemos una función sum.js:

export const sum = (a, b) => a + b;

El test sería:

import { sum } from './sum';

test('suma dos números correctamente', () => {
  expect(sum(2, 3)).toBe(5);
});

Simple, claro y rápido de ejecutar.

Testeando un componente funcional

Supongamos este botón:

import React from 'react';
import { Button } from 'react-native';

const MyButton = ({ onPress, title }) => (
  <Button onPress={onPress} title={title} />
);

export default MyButton;

Test:

import { render, fireEvent } from '@testing-library/react-native';
import MyButton from './MyButton';

test('llama a la función onPress cuando se presiona el botón', () => {
  const onPressMock = jest.fn();
  const { getByText } = render(<MyButton title="Click me" onPress={onPressMock} />);

  fireEvent.press(getByText('Click me'));
  expect(onPressMock).toHaveBeenCalledTimes(1);
});

Con esto nos aseguramos de que el botón realmente responde a la interacción del usuario.

Testeando un hook personalizado

Hook useCounter.js:

import { useState } from 'react';

export const useCounter = () => {
  const [count, setCount] = useState(0);

  const increment = () => setCount(count + 1);
  const decrement = () => setCount(count - 1);

  return { count, increment, decrement };
};

Test:

import { renderHook, act } from '@testing-library/react-hooks';
import { useCounter } from './useCounter';

test('incrementa y decrementa correctamente', () => {
  const { result } = renderHook(() => useCounter());

  act(() => {
    result.current.increment();
  });

  expect(result.current.count).toBe(1);

  act(() => {
    result.current.decrement();
  });

  expect(result.current.count).toBe(0);
});

Buenas prácticas de Unit Testing en React Native

  • Nombrá tus tests de manera descriptiva: un buen nombre hace que los errores sean más fáciles de entender.
  • Testeá lógica, no implementación: concentrate en el qué, no en el cómo.
  • Mantené los tests pequeños y específicos: un solo objetivo por test.
  • Utilizá mocks y spies inteligentemente: sólo cuando sea necesario.
  • Incluí tests para casos límite: entradas nulas, vacías o fuera de rango.

Beneficios de apostar al Unit Testing en mobile

  • Ahorro de costos: encontrar bugs temprano evita retrabajo costoso.
  • Mayor velocidad de desarrollo: menos tiempo de debugging.
  • Facilita el trabajo en equipo: nuevos desarrolladores entienden mejor el sistema al ver los tests.
  • Mejora continua: permite refactorizar con confianza.

En proyectos mobile, donde la experiencia del usuario es crítica, invertir en una suite robusta de Unit Tests marca la diferencia entre una app exitosa y una plagada de problemas.

Recursos adicionales

🔗 Testing Library para React Native
🔗 Guía de Testing de React Native oficial

Conclusión

Incorporar Unit Testing en React Native usando Jest no sólo mejora la calidad de tu aplicación, sino que también impulsa la eficiencia y la velocidad de tu equipo. Con herramientas accesibles, sintaxis amigable y un ecosistema robusto, Jest convierte el testing en una parte natural del proceso de desarrollo mobile.

Más recursos

Artículos

Automatizá el QA tan rápido como Colapinto en la F1

Mientras Franco Colapinto nos emociona en cada curva, en el mundo del software también hay que moverse rápido. Pero no…

Artículos

Integrar BrowserStack en pipelines de Integración Continua (CI)

En el entorno actual de desarrollo ágil y despliegues continuos, garantizar la calidad del software es más importante que nunca….

Artículos

QA Manual vs QA Automation

Cuando hablamos de aseguramiento de la calidad (QA), muchas veces salta la típica duda: ¿esto lo testeamos a mano o…