DevPath · Aprende a programar ESPTEN

Testing de la aplicación completa

E2E: el usuario en un navegador real

Qué es un test E2E

Un test end-to-end automatiza un navegador real (o headless) para reproducir un flujo completo de usuario: abre la página, escribe en un formulario, hace clic, espera la respuesta del backend y verifica lo que ve. Si pasa, tienes una prueba fuerte de que el sistema entero funciona junto.

Herramientas: Playwright y Cypress

// Conceptual (Playwright no corre en este sandbox):
await page.goto("/login");
await page.fill("#email", "ana@x.com");
await page.click("text=Entrar");
await expect(page.getByText("Bienvenida")).toBeVisible();

¿Cuándo merece la pena?

Reserva los E2E para los flujos críticos de negocio: registro, login, compra, el "camino feliz" que no puede romperse. No intentes cubrir cada caso límite con E2E; eso se hace mejor con unit/integración (más baratos y precisos).

Flakiness (fragilidad)

Un test flaky pasa a veces y falla otras sin que cambie el código. Es el mayor enemigo de los E2E: erosiona la confianza en la suite. Causas y remedios:

Testing en CI

En integración continua (CI) la suite se ejecuta automáticamente en cada push o pull request, normalmente con el navegador en modo headless. Buenas prácticas: ejecutar los unit primero (fallan rápido y barato), paralelizar, guardar capturas/vídeos/trazas de los E2E fallidos para depurar, y bloquear el merge si la suite no pasa.

Ejemplos

Esperar a una condición, no a un tiempo fijo

// Mal: frágil ante variaciones de tiempo.
// await sleep(500); expect(visible(boton));

// Bien: esperamos a que la condición se cumpla.
async function esperarHasta(cond, intentos = 10) {
  for (let i = 0; i < intentos; i++) {
    if (cond()) return true;
    await new Promise((r) => setTimeout(r, 10));
  }
  return false;
}
let listo = false;
setTimeout(() => { listo = true; }, 30);
console.log(await esperarHasta(() => listo)); // true
Pon esto en práctica

DevPath es un curso práctico: aquí lees la teoría; en la app la pones en práctica con ejercicios que se ejecutan de verdad, sin conexión.

Empezar gratis en la app →
← Unit e integración: dobles y asercionesVer el módulo →