Por Qué Importa el Testing de Manejo de Errores

Los usuarios inevitablemente encontrarán errores — visitarán páginas eliminadas, enviarán formularios inválidos, experimentarán timeouts de red y activarán fallos del servidor. Cómo tu aplicación maneja estos errores determina si los usuarios se quedan o se van, si confían en tu producto y si los atacantes pueden explotar las respuestas de error.

Categorías de Códigos de Estado HTTP

RangoCategoríaSignificado
2xxÉxitoSolicitud completada exitosamente
3xxRedirecciónEl cliente debe tomar acción adicional
4xxError del ClienteLa solicitud era inválida
5xxError del ServidorEl servidor falló al cumplir una solicitud válida

Códigos Clave a Probar

CódigoSignificadoCuándo Probar
200OKCada solicitud exitosa
301Movido PermanentementeMigraciones de URL, redirects HTTPS
400Bad RequestDatos de solicitud malformados
401No AutorizadoAutenticación faltante o inválida
403ProhibidoAuth válida pero permisos insuficientes
404No EncontradoURLs inexistentes
429Demasiadas SolicitudesRate limiting
500Error Interno del ServidorExcepciones no manejadas
503Servicio No DisponibleMantenimiento, sobrecarga

Testing de Páginas de Error Personalizadas

Página 404

  • URL inexistente muestra 404 personalizado (no error genérico)
  • Mantiene branding del sitio (header, footer, estilos)
  • Navegación disponible
  • Barra de búsqueda presente
  • Links a páginas populares
  • Retorna código HTTP 404 correcto (no 200)
  • Funciona en todos los idiomas soportados

Página 500

  • Mensaje amigable sin detalles técnicos
  • Sin stack traces, errores de BD ni rutas de archivos
  • Información de contacto o link de soporte
  • Sugiere intentar de nuevo más tarde

Página 403

  • Explica que el acceso es denegado sin revelar por qué
  • Sugiere iniciar sesión si no está autenticado

Testing de Errores de Validación de Formularios

Validación del Lado del Cliente

EscenarioComportamiento Esperado
Campo requerido vacío“Este campo es requerido” cerca del campo
Formato de email inválido“Por favor ingresa un email válido”
Contraseña muy corta“La contraseña debe tener al menos 8 caracteres”
Contraseñas no coinciden“Las contraseñas no coinciden”

Validación del Lado del Servidor

  • Deshabilitar JavaScript y enviar formularios sigue mostrando errores
  • Solicitudes directas por API retornan mensajes de error apropiados

Consideraciones de Seguridad

Qué NO deben revelar las respuestas de error: stack traces, errores de BD, rutas de archivos, versiones del servidor, IPs internas.

El login debe decir “Email o contraseña inválidos” (no “Email no encontrado”).

Ejercicio: Auditoría de Manejo de Errores

Prueba el manejo de errores de una aplicación web.

Parte 1: Páginas de Error HTTP

PruebaURL/AcciónEsperadoRealEstado
Página 404/pagina-inexistente404 personalizado con nav
404 retorna código correctoVerificar response codeHTTP 404
404 en otros idiomas/es/pagina-inexistente404 en idioma correcto
Página 403Acceder admin sin auth403 personalizado o redirect
Página 500Activar error del servidor500 sin stack trace

Parte 2: Validación de Formularios

InputValorMensaje de Error Esperado
Emailvacío“Email es requerido”
Email“no-es-email”“Ingresa un email válido”
Contraseña“123”“Mínimo 8 caracteres”
Campo requeridoomitirlo“Este campo es requerido”

Parte 3: Seguridad de Mensajes de Error

VerificaciónPasa/Falla
Sin stack traces en ninguna respuesta
Sin errores de BD visibles
Sin rutas de archivos
Sin versión del servidor en headers
Error de login no revela si email existe
Solución: Bugs Comunes de Manejo de Errores

Bug 1: Página 404 retorna HTTP 200. Motores de búsqueda indexan páginas “no encontrado” como contenido real.

Bug 2: Stack trace visible en error 500 de producción. Error del servidor revelaba todo el stack trace.

Bug 3: Errores de validación desaparecen al hacer scroll. Los errores en la parte superior se perdían.

Bug 4: Login revela existencia de email. “No se encontró cuenta” ayuda a atacantes.

Bug 5: API retorna consulta SQL. Solicitud malformada exponía detalles de BD.

Bug 6: Página de error sin navegación. Solo “Página no encontrada” sin ningún link.

Automatización de Manejo de Errores

test('página 404 retorna código correcto', async ({ page }) => {
  const response = await page.goto('/pagina-que-no-existe');
  expect(response.status()).toBe(404);
  await expect(page.locator('nav')).toBeVisible();
});

test('errores API no filtran internos', async ({ request }) => {
  const response = await request.get('/api/users/id-invalido');
  const body = await response.json();
  expect(body.message).not.toContain('Exception');
  expect(body.message).not.toContain('SELECT');
});

Puntos Clave

  • El manejo de errores es frecuentemente sub-probado — inclúyelo como parte estándar del plan de testing
  • Las páginas de error personalizadas deben mantener branding y proporcionar navegación
  • Los mensajes de error deben ser amigables: explicar el problema y cómo corregirlo
  • Nunca expongas detalles técnicos en respuestas de error de producción
  • Previene filtración de información a través de respuestas de error (enumeración de login)
  • Verifica que los códigos HTTP coincidan con el tipo de error