← Blog / Calidad

Los tests son el contrato: cómo confío en código que escribió una IA

El código escrito por una IA se ve seguro. Compila, tiene nombres ordenados, incluso trae comentarios. Nada de eso te dice que haga lo que pidió el cliente. Lo único que lo dice es una prueba que falla cuando el comportamiento es incorrecto.

Prueba el comportamiento, no la implementación

Me importa lo que puede hacer un visitante: agregar un producto al carrito, enviar un formulario, pagar. Las pruebas de punta a punta (e2e) describen justo eso y no les importa cómo se escribió el código por debajo, si lo hice yo o un modelo. Eso las convierte en el árbitro ideal del trabajo asistido por IA.

test("visitor can request a website audit", async ({ page }) => {
  await page.goto("/website-audit/");
  await page.fill("[name=site]", "example.com");
  await page.fill("[name=name]", "Test User");
  await page.fill("[name=email]", "test@example.com");
  await page.click("button[type=submit]");
  await expect(page.locator(".form__status")).toContainText("review");
});

Escribe la prueba primero cuando hay mucho en juego

Para flujos de compra, formularios y pagos, escribo la prueba antes de pedir el código. La prueba es la especificación. Si el código generado pasa, lo leo y me lo quedo. Si falla, el mensaje de error me dice exactamente qué decir en el siguiente prompt.

No dejes que el modelo califique su propia tarea

Un modelo al que le pides el código y los tests escribirá felizmente tests que pasan. Reviso las aserciones: ¿verifican el resultado real o solo que se llamó una función? Una prueba que no puede fallar es decoración.

Cubre los caminos feos

  • Datos vacíos e inválidos.
  • Redes lentas y peticiones fallidas.
  • Anchos móviles y navegación solo con teclado.
  • Lo que se rompió la vez anterior.

Documenta lo que protegen los tests

Una documentación técnica corta junto a las pruebas se paga sola. Le dice al siguiente desarrollador, o al siguiente modelo, qué comportamientos son promesas y cuáles son accidentes.

La IA hizo más rápido escribir código. No hizo más barato equivocarse. Los tests son la forma de conservar la velocidad sin pagar los errores.