¿Cómo se relacionan las tablas en un proyecto Laravel?
Comenzar un proyecto en Laravel requiere establecer relaciones entre tablas, fundamentales para desarrollar una aplicación robusta. Esto se logra a través del "testing", asegurando que el método específico funcione adecuadamente. En este caso, configuraremos la relación "HasMany" para asegurar que un usuario pueda tener varios repositorios.
¿Cómo crear un archivo de prueba en Laravel?
Para establecer y probar nuestras relaciones, primero debemos crear un archivo de prueba unitario. Esto se logra con el comando de Artisan para crear un test:
php artisan make:test UserTest --unit
Dentro de este archivo configuraremos una relación de que un usuario tiene muchos repositorios. Es crucial que el título del método en el test describa claramente la función que realiza, como en este caso HasMany.
¿Cómo instanciar un usuario y asociar repositorios?
El paso siguiente es crear un usuario y asegurarse de que puede tener múltiples repositorios. Para esto, emplearemos el método HasMany en el modelo de usuario.
Con este código, especificamos que un usuario puede tener múltiples repositorios.
¿Qué hacer si fallan las pruebas?
Usualmente, al ejecutar tus pruebas notarás errores derivados de configuraciones faltantes o incorrectas. Asegúrate de que estás utilizando el test case correcto. Si estás utilizando Laravel, es preferible usar el test case proporcionado por Laravel que integra phpUnit y simplifica ciertas configuraciones.
php artisan test
Al correr este comando, verificamos que nuestra configuración de relación entre usuario y repositorios funcione correctamente sin errores.
Incorporar esta configuración en tus proyectos te asegura que tienes una base sólida y testeada, permitiendo un desarrollo más eficiente y fluido. ¡Sigue aprendiendo y desarrollando tus habilidades en desarrollo de software!
Configuración de Relaciones y Pruebas Unitarias en Laravel
Para que no salten errores, debido a que Laravel te instala muchos tests de ejemplo, puedes usar la bandera --filter y darle el nombre test_has_many_repositories para que solo se ejecute ese test.
Algo importante, al parecer (o al menos este fue mi caso), hay una nueva actualización de Laravel 8 en donde ahora trae incluidos varios tests por defecto en la carpeta ```Feature``, recomiendo eliminarlos, ya que como aún no hemos configurado la base de datos ni nada te va a llenar la consola de errores, para seguir el curso tal cual es mejor eliminarlo :D
Tras descomentar las lineas del fichero phpunit.xml relativas al uso de la base de datos me pasan practicamente todos los test, salvo los que renderizan vistas. Voy a comentar dichos métodos en lugar de eliminarlos, aunque creo que eliminarlos también es una opción válida. Buen curso a todos!!
No entendí porque cambiamos la clase para usar TestCase, osea, según el profe estábamos utilizando el TestCase de PhpUnit directamente, pero lo cambiamos para utilizar el TestCase propio de Laravel que a su vez usa el TestCase de PHPUnit, entonces porque hicimos el cambio? No me queda claro del todo.
Cambiamos la clase debido que Laravel ya utiliza PHPUnit en su sistema de testing, pero además le añade cierta configuración y métodos que hace mucho más óptimo el testeo. Fíjate que hay dos maneras de testear, una es ejecutando vendor/bin/phpunit y la otra es php artisan test. Nosotros utilizamos php artisan test y es por eso que cambiamos la clase, para obtener toda la configuración optimizada que nos provee Laravel.
╰─○ php artisan test --filter UserTest
PHP Fatal error: Trait "Laravel\Sanctum\HasApiTokens" not found in /home/sherwood/Documents/Learning/Laravel/tdd/app/Models/User.php on line 13
In User.php line 13:
Trait "Laravel\Sanctum\HasApiTokens" not found
```Saben a qué se deba esto?
El proyecto ficticio tiene dos entidades: Users y Repositories.
Entre las dos hay una relación uno a muchos (User ->> Repository) : Un Usuario puede tener muchos repositorios y un Repositorio pertenece a un Usuario.
<u>En estas primeras clases se escribirán los Test para comprobar que esas relaciones son ciertas.</u>
Recomiendo PHPStorm como IDE porque al llamar a una instancia de una clase dentro de Laravel o de un paquete, automaticamente te importa su uso. Para trabajar con PHP lo recomiendo muchisimo
Hacer que exista relación entre una tabla y otra a través del testing.
Si queremos hacer test a un modelo concreto por ejemplo, lo haremos de la siguiente forma: php artisan make:test Models/UserTest --unit.
Vamos a comprobar si un usuario tiene muchos repositorios.
Creamos el modelo de lo que queremos que pueda tener varios un usuario, en ese caso repositorios. php artisan make:model Repository -mf. Con -mf creamos el modelo y el factory.
Una vez hecho debemos ir al modelo que queremos que conecte, en ese caso users e indicarle:
Vamos a testear con php artisan test --filter UserTest (eso para que no nos haga todos los test que ya trae consigo)
Nos habla de la conexión.
Debemos darnos cuenta de que eso es porque en el test UserTest.php estamos usando directamente PHPUnit con el use PHPUnit\Framework\TestCase;. Lo debemos cambiar a use Tests\TestCase; que también nos acabará llegando a PHPUnit de igual manera pero añadiendo la configuración optimizada para Laravel.
Ahora si volvemos a ejecutar php artisan test --filter UserTest ya nos indica PASS, todo correcto!