DEV Community

Maria M.
Maria M.

Posted on

📚 Escribiendo Código Testeable en React

En el desarrollo frontend, escribir código testeable es importante para mantener la calidad y la mantenibilidad de nuestras aplicaciones. Aquí te presentamos una guía simple y efectiva para asegurarte de que tus componentes React sean fáciles de probar.

🧩 Componentes Desglosados y Simples

Divide tu aplicación en componentes pequeños y enfocados, cada uno con una única responsabilidad.

const Button = ({ label, onClick }) => (
  <button onClick={onClick}>{label}</button>
);
export default Button;
Enter fullscreen mode Exit fullscreen mode

🧠 Evitar Lógica Compleja en los Componentes

Mantén la lógica compleja fuera de los componentes, en funciones que puedan ser probadas por separado.

const calculateTotal = (items) => {
  return items.reduce((total, item) => total + item.price, 0);
};

const Cart = ({ items }) => {
  const total = calculateTotal(items);
  return <div>Total: ${total}</div>;
};
Enter fullscreen mode Exit fullscreen mode

🛠️ Uso de Props para Inyectar Dependencias

Inyecta datos y funciones a través de props en lugar de usar dependencias globales.

const UserGreeting = ({ user, logout }) => (
  <div>
    <p>Hello, {user.name}!</p>
    <button onClick={logout}>Logout</button>
  </div>
);
Enter fullscreen mode Exit fullscreen mode

✅ Escribir Pruebas de Unidad y de Integración

Pruebas de Unidad para funciones individuales:

import { calculateTotal } from './path/to/your/function';

test('calculates total correctly', () => {
  const items = [{ price: 10 }, { price: 20 }];
  expect(calculateTotal(items)).toBe(30);
});
Enter fullscreen mode Exit fullscreen mode

Pruebas de Integración para componentes:

import React from 'react';
import { render, screen } from '@testing-library/react';
import Cart from './Cart';

test('renders total correctly', () => {
  const items = [{ price: 10 }, { price: 20 }];
  render(<Cart items={items} />);
  expect(screen.getByText('Total: $30')).toBeInTheDocument();
});
Enter fullscreen mode Exit fullscreen mode

🎭 Utilizar Mocks y Spies

Usa mocks para simular dependencias y spies para verificar interacciones.

import React from 'react';
import { render, screen } from '@testing-library/react';
import UserGreeting from './UserGreeting';

test('renders user greeting', () => {
  const mockUser = { name: 'John' };
  const mockLogout = jest.fn();
  render(<UserGreeting user={mockUser} logout={mockLogout} />);

  expect(screen.getByText('Hello, John!')).toBeInTheDocument();
  screen.getByText('Logout').click();
  expect(mockLogout).toHaveBeenCalled();
});
Enter fullscreen mode Exit fullscreen mode

🔧 Herramientas Recomendadas

  • React Testing Library: Facilita pruebas de integración y simulación de interacciones de usuario. Documentación
  • Jest: Framework de pruebas recomendado para React, ideal para pruebas de unidad y mocks. Documentación

🌟 Mejores Prácticas

  1. ✏️ Escribir Pruebas Primero: Adopta TDD para asegurar que tu código sea testeable desde el principio.
  2. 🧼 Mantener los Componentes Puros: Evita dependencias globales y estados compartidos.
  3. 📝 Documentar las Pruebas: Asegúrate de que las pruebas estén bien documentadas para facilitar su mantenimiento.

🎯 Resumen

  • 🧩 Componentes Simples: Facilitan la prueba de unidad.
  • 🧠 Lógica Separada: Aísla la complejidad en funciones.
  • 🛠️ Props para Dependencias: Mejora la testabilidad.
  • ✅ Pruebas de Unidad e Integración: Cobertura completa.
  • 🎭 Mocks y Spies: Simulan dependencias y verifican interacciones.

Siguiendo estos principios y prácticas, escribirás código React testeable, manteniendo alta la calidad de tus aplicaciones.

📚 Recursos Adicionales

Asegúrate de aplicar estos conceptos en tu próximo proyecto y observa cómo mejora la calidad de tu código y la facilidad para mantenerlo. ¡Feliz programación! 🚀

Top comments (0)