DevPath · Aprende a programar ESPTEN

Testing de la aplicación completa

Unit e integración: dobles y aserciones

Aislar con dobles de prueba

Para probar una unidad sin sus dependencias reales (red, BD, reloj, pagos) usamos dobles de prueba (test doubles):

En la práctica el lenguaje es laxo: mucha gente llama "mock" a cualquier doble. Lo importante es la intención: stub = controlar entradas, spy/mock = verificar salidas/interacciones.

Inyección de dependencias

Para poder sustituir una dependencia por un doble, la función no debe crearla por dentro, debe recibirla. Eso es inyección de dependencias:

// Difícil de testear: la dependencia está "soldada".
function registrar(email) { enviarCorreoReal(email); }

// Fácil de testear: le inyectamos el colaborador.
function registrar(email, enviarCorreo) { enviarCorreo(email); }
// En el test pasamos un espía y verificamos que se llamó.

Probar funciones puras y endpoints

// Conceptual (supertest no corre en este sandbox):
await request(app).get("/usuarios/1").expect(200);

En estos ejercicios simulamos esa petición/respuesta con crearReq() y crearRes(), y afirmamos sobre res.statusCode y res.body.

Aserciones (expect)

Una aserción declara lo que debe cumplirse; si no, lanza y el test falla. La API expect(actual).toBe(esperado) es solo azúcar sobre un if + throw.

Cobertura y sus límites

La cobertura (coverage) mide qué porcentaje de líneas/ramas ejecutó la suite. Útil para encontrar zonas sin probar, pero no mide calidad: puedes tener 100% de cobertura y cero aserciones útiles. Cobertura alta ≠ código correcto.

Ejemplos

Un espía hecho a mano

function crearEspia() {
  const espia = (...args) => { espia.llamadas.push(args); };
  espia.llamadas = [];
  return espia;
}
const enviar = crearEspia();
function registrar(email, enviarCorreo) { enviarCorreo(email); }
registrar("ana@x.com", enviar);
console.log(enviar.llamadas.length === 1);       // true
console.log(enviar.llamadas[0][0] === "ana@x.com"); // 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 →
← La pirámide de testingE2E: el usuario en un navegador real →