Calidad – Juan Camilo Niño
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.