¿Cómo crear un helper para validar correos electrónicos en PHP?
El desarrollo y validación de helpers es una parte integral del proceso de programación en PHP y Laravel. Estos archivos no solo facilitan la gestión de funciones recurrentes, sino que también mejoran la eficiencia del código y su mantenimiento a largo plazo. Veamos cómo crear y probar un helper para la validación de correos electrónicos.
¿Cuál es el primer paso para crear un helper?
Crear un archivo de testing:
Utiliza el comando php artisan make:test nombreDelTest para generar un nuevo archivo de pruebas en tu entorno de trabajo. Este archivo será donde se concentren las funciones específicas a evaluar.
Definir el helper a crear:
Dentro del archivo de test, define la función helper que deseas implementar. En este caso, estamos trabajando con un helper llamado validarEmail.
¿Cómo se desarrolla la función de validación de email?
Programar en un nuevo archivo:
Crea un archivo llamado funciones.php o helper.php en la raíz del proyecto. Este archivo contendrá todas las funciones que desees implementar.
Desarrollar la función validarEmail:
Comprueba si la función ya existe, y si no, créala con un simple if que valide su existencia.
if(!function_exists('validarEmail')){functionvalidarEmail($email){// Asumiendo que la clase Email con su método de validación ya está creadareturnEmail::validar($email);}}
¿Cómo integrar el helper en el archivo de Composer?
Configurar el autoload en Composer:
Localiza la llave autoload en el archivo composer.json y añade lo siguiente:
"autoload":{"files":["app/helper.php"]}
Actualizar Composer:
Ejecuta el comando composer dump-autoload para actualizar la configuración de Composer. Esto garantizará que el archivo del helper sea reconocido en todo el proyecto.
¿Cómo probamos el helper con PHPUnit?
Ejecutar las pruebas:
Una vez configurado el helper, verifica su funcionalidad ejecutando PHPUnit con el comando php artisan test. Esto debería indicarte si los tests se ejecutan correctamente.
Verificar la salida esperada:
Asegúrate de que los resultados de los tests coincidan con los resultados esperados. Un correo válido debe retornar true, mientras que uno inválido, false.
¿Por qué el testing es esencial en el desarrollo?
El testing automatizado nos evita la preocupación de introducir errores al revisar el navegador manualmente cada vez que realizamos un cambio. A medida que los proyectos crecen, las pruebas se vuelven fundamentales para asegurar que las modificaciones no afecten funcionalidades existentes. Considere que probar una función sin alterarla en el entorno gráfico es crucial para mantener la integridad del proyecto.
En resumen, el uso de helpers y pruebas automatizadas son mecanismos importantes en desarrollo moderno de software, especialmente cuando se trabaja con PHP y Laravel, ya que permite centrarse en los resultados y dinamiza la gestión del código.
De hecho podríamos decir que los tests son "abstractos" en el sentido de que, no les interesa cuál sea la lógica detrás ni tampoco cómo hagan la validación, les importa que las hagan, por eso es que son enfocados en el resultado, allá atrás podrías tener cualquier código, de hecho hasta podrías tener un código que sea un cURL que envíe una solicitud a algún servidor corriendo en Python donde te regrese el resultado de la validación y ese resultado tú se lo mandas al test y va a funcionar:D!
El enfoque es el resultado, se prueba lo que regresa una función, lo que retorna el método de una clase, las pruebas se enfocan en el resultado esperado.
Por qué para el caso del archivo Helpers/Email.php (de la clase 5) no fue necesario agregarlo en el composer.json?
¡Hola! Porque si te fijas, en tu archivo composer.json, en el apartado de autoload, está esto:
Puedes darte cuenta de que tenemos una llave que hace referencia a la carpeta app, esto significa que Composer es capaz de reconocer cualquier cosa que esté dentro de esa carpeta (siempre y cuando siga los estándares de namespace).
El archivo Helpers/Email.php está dentro de la carpeta app, por lo que Composer es capaz de reconocerlo, por eso no es necesario agregarlo :D
¿Porqué le devuelve true si se supone que está escribiendo mal el email con doble @@? Cuando lo escribo así me generar un error en el test
Veamos el código, en el repositorio de platzi tenemos el proyecto usado en el curso.
tengo la misma duda sobre por qué aparece como válido el mail con 2 @. No vi algo en el repositorio del curso que me explicara esto
En mi caso opte por hacerlo de las dos manera y funciona perfecto. !!
use App\Helpers\Email;
public function testEmail()
{
$result = Email::validate('i@email.com');
$this->assertTrue($result);
Es recomendable que los test validen una sola cosa a la vez (unitarios). Aunque a fin de cuentas estas validando un email, los test se hicieron de forma separada porque estan evaluando las dos implementaciones para la validacion del mail.
Illuminate\Foundation\ComposerScripts::postAutoloadDump
Script Illuminate\Foundation\ComposerScripts::postAutoloadDump handling the post-autoload-dump event terminated with an exception
[ErrorException]
require(/home/ale/platzi/laravel8-curso-platzi/phpunit/vendor/composer/../../app
u
nctions.php): failed to open stream: No such file or directory
profe. me sale el siguiente error, le doy composer dump y nada..