馃И Testing con Jest y React Testing Library

Curso Next.js — Testing con Jest y React Testing Library

馃И Testing con Jest y React Testing Library

Aprende c贸mo probar tus componentes, hooks y l贸gica de negocio en Next.js utilizando Jest y React Testing Library, las herramientas m谩s populares del ecosistema React.


馃З ¿Por qu茅 hacer testing en Next.js?

El testing es una parte fundamental del desarrollo profesional. Permite asegurar que los componentes funcionan como se espera y que futuras actualizaciones no rompan la aplicaci贸n.

Con Jest podemos ejecutar pruebas unitarias y de integraci贸n, mientras que React Testing Library (RTL) nos permite probar componentes simulando c贸mo los usar铆a un usuario real.


⚙️ Instalaci贸n y configuraci贸n inicial

Primero, instala Jest y React Testing Library en tu proyecto:

npm install --save-dev jest @testing-library/react @testing-library/jest-dom ts-jest

Luego crea un archivo de configuraci贸n para Jest en la ra铆z del proyecto:

馃搫 jest.config.js
/** @type {import('jest').Config} */
const nextJest = require('next/jest');

const createJestConfig = nextJest({
  dir: './',
});

const customJestConfig = {
  setupFilesAfterEnv: ['<rootDir>/jest.setup.js'],
  testEnvironment: 'jsdom',
  moduleNameMapper: {
    '^@/(.*)$': '<rootDir>/app/$1',
  },
};

module.exports = createJestConfig(customJestConfig);
      

Y crea el archivo de configuraci贸n adicional:

馃搫 jest.setup.js
import '@testing-library/jest-dom';
      
馃挕 Consejo: Usa testEnvironment: 'jsdom' para simular el entorno del navegador y poder renderizar componentes React.

馃 Ejemplo b谩sico: probando un componente

Veamos un ejemplo con un componente simple llamado Boton.tsx:

馃搫 app/components/Boton.tsx
type Props = {
  label: string;
  onClick: () => void;
};

export default function Boton({ label, onClick }: Props) {
  return (
    <button onClick={onClick} className="bg-blue-500 text-white p-2 rounded">
      {label}
    </button>
  );
}
      
馃搫 app/components/__tests__/Boton.test.tsx
import { render, screen, fireEvent } from '@testing-library/react';
import Boton from '../Boton';

describe('Boton Component', () => {
  test('muestra el texto correctamente', () => {
    render(<Boton label="Hacer clic" onClick={() => {}} />);
    expect(screen.getByText('Hacer clic')).toBeInTheDocument();
  });

  test('ejecuta la funci贸n onClick al hacer clic', () => {
    const handleClick = jest.fn();
    render(<Boton label="Enviar" onClick={handleClick} />);
    fireEvent.click(screen.getByText('Enviar'));
    expect(handleClick).toHaveBeenCalledTimes(1);
  });
});
      

Este test verifica que el componente Boton:

  • ✅ Muestra el texto recibido en las props
  • ✅ Llama a la funci贸n onClick al hacer clic


馃憗️ Ejemplo visual del componente

As铆 se ver铆a el componente Boton renderizado en la interfaz.


馃攣 Probando Hooks personalizados

Tambi茅n puedes probar hooks utilizando @testing-library/react-hooks (ahora parte de RTL).

馃搫 hooks/useContador.ts
import { useState } from 'react';

export function useContador() {
  const [contador, setContador] = useState(0);

  const incrementar = () => setContador(contador + 1);

  return { contador, incrementar };
}
      
馃搫 hooks/__tests__/useContador.test.ts
import { renderHook, act } from '@testing-library/react';
import { useContador } from '../useContador';

test('incrementa el contador correctamente', () => {
  const { result } = renderHook(() => useContador());
  act(() => {
    result.current.incrementar();
  });
  expect(result.current.contador).toBe(1);
});
      

馃殌 Beneficios del Testing en Next.js


✅ Conclusi贸n

El testing con Jest y React Testing Library es esencial para aplicaciones Next.js robustas. Con una configuraci贸n m铆nima, puedes asegurar que tus componentes, hooks y rutas funcionen correctamente antes de llegar al entorno de producci贸n.

Publicar un comentario

0 Comentarios