Cuando programas con confianza, sabes que cada cambio en tu código está respaldado por pruebas que verifican su correcto funcionamiento. La refactorización es precisamente eso: reorganizar y mejorar tu código sin alterar el comportamiento esperado, asegurándote de que tus tests sigan pasando en verde.
¿Qué significa refactorizar sin modificar las pruebas?
La refactorización consiste en alterar el código fuente sin tocar las pruebas existentes [0:12]. Ya sabemos que nuestro testing funciona correctamente. Como programadores, el objetivo es lograr una mejor organización del código, pero las pruebas deben seguir obteniendo resultados positivos. Si algo se rompe, los tests nos lo indican de inmediato.
Esto garantiza algo fundamental: no hemos roto ninguna parte del programa. En lugar de verificar manualmente cada funcionalidad en el navegador, confiamos en un sistema automatizado que actúa como un pequeño robot revisando todo por nosotros [2:28].
¿Cómo se aplica la refactorización en un proyecto Laravel?
El ejemplo práctico parte de mover lógica que estaba directamente en las rutas hacia un controlador dedicado. El proceso se desarrolla así:
- Se crea un nuevo controlador con
php artisan make:controller ProfileController [0:43].
- Se corta el código existente en el archivo de rutas.
- Se configura la ruta para apuntar al nuevo controlador usando la referencia
App\Http\Controllers\ProfileController::class con el método correspondiente [1:10].
¿Qué sucede cuando las pruebas fallan tras el cambio?
Al ejecutar los tests después de mover el código, las pruebas se rompen [1:34]. El sistema indica que no encuentra el archivo esperado y que la afirmación devuelve falso. Este momento es clave: los tests están cumpliendo su función al alertarnos de que algo falta en nuestra nueva configuración.
El error en este caso fue no haber creado el método dentro del controlador. Una vez que se define el método que recibe el request, sube la foto y redirecciona a profile [2:08], los tests vuelven a pasar correctamente.
¿Por qué los tests validan que no se dañó nada?
Al ejecutar nuevamente las pruebas y obtener verde [2:18], confirmamos que:
- El código fue reorganizado en un archivo nuevo.
- La funcionalidad permanece intacta.
- No se modificó ni una sola línea del test original.
¿Cuándo cobra mayor importancia el testing en proyectos reales?
Imagina un sistema con mil funciones y necesitas modificar una de ellas [2:48]. Ejecutar todos los tests te permite verificar que el resto del sistema sigue funcionando sin problemas. Esto es especialmente valioso cuando enfrentas escenarios como realizar múltiples mejoras antes de una entrega.
Sin tests, presentar un proyecto al cliente genera incertidumbre: no sabes si algún cambio pudo haber afectado otra parte del sistema [3:04]. Con pruebas automatizadas, cada luz verde te da la confianza necesaria para entregar sabiendo que todo funciona correctamente.
La próxima vez que reorganices tu código, recuerda que la refactorización no se trata solo de escribir mejor, sino de demostrar con evidencia que nada se ha roto. ¿Has tenido alguna experiencia donde los tests te salvaron de un error inesperado? Comparte tu historia.