Configuración de Proyectos en Laravel: Controladores y Pruebas
Resumen
¿Cómo construimos nuestro proyecto en Laravel?
El desarrollo en Laravel no solo se trata de escribir código. Vamos a revisar un proyecto de texto, un enfoque esencial para el control de calidad del software. En este proyecto, estructuramos y organizamos nuestro código para facilitar su mantenimiento y comprensión. Es una práctica vital para cualquier desarrollador, en especial cuando trabajamos en equipo.
Primero, organizamos nuestro código en carpetas específicas. Tenemos una carpeta bajo "http/controladores" llamada "Happy". Esta organización no es obligatoria, pero ayuda a separar claramente los diferentes aspectos del proyecto, especialmente cuando se comienzan a crear más módulos o se trabaja en proyectos de mayor envergadura.
¿Por qué es importante la estructura de pruebas?
Las pruebas son cruciales en el desarrollo. Nos aseguramos de que nuestro código funcione correctamente a través de testing, lo que evita subir errores a producción. Al ejecutar nuestras pruebas desde el terminal, podemos verificar si los cambios realizados no afectan lo que ya está funcionando correctamente.
Ejecutamos los tests con:
vendor/bin/phpunit
Revisamos que todas las pruebas pasen sin errores, lo que indica que nuestra implementación es correcta.
¿Cómo configuramos nuestro espacio para pruebas?
Para crear un entorno de pruebas robusto, configuramos una base de datos específicamente para ello. Esto asegura que los tests no interfieran con la base de datos principal ni afecten los datos reales.
Creamos un nuevo archivo para la base de datos de pruebas:
database.sqlite
Configuramos el acceso a esta base de datos en nuestro archivo de configuración:
Cada uno de estos pasos prepara el terreno para un código limpio y organizado. Mantenemos la misma estructura de carpetas tanto en la zona de pruebas como en el control principal, lo que facilita a futuros programadores la comprensión del proyecto.
¿Cómo aseguramos el éxito al seguir estas prácticas?
Te animamos a replicar cada uno de estos pasos en tu proyecto. La repetición y la práctica son esenciales para dominar estas técnicas. Construir tus proyectos de Laravel con esta metodología te permitirá mantener un código limpio, bien organizado y fácil de mantener en el tiempo. ¡Sigue aprendiendo y mejorando tus habilidades!
Desde Laravel 7 la base de datos de testing ya viene configurada por defecto como memory, lo cual significa que los tests pueden correr en memoria, por tanto si estas realizando un proyecto en Laravel 7 esta configuracion ya no es necesaria, sin embargo en todas las versiones previas si es necesario configurarlo como lo configura aqui el profe
Es así :)
para proyectos, conviene usar una versión LTS de laravel, no? si es así, es correcto que se haya explicado estos pasos de configuración, ya que laravel 6 es el último LTS
si alguien esta utilizando Laravel > 7.x para ejecutar los test ya existe un comando de artisan
php artisan test
Proyecto API con TDD: presentación y configuración inicial
Le pasamos el parámetro '--api' para que cree un controlador de recursos con 5 métodos.
Para crear nuestra Database, creamos un archivo dentro de la carpeta database que se llame 'database.sqlite'. Y vamos al archivo Database.php dentro de config y borramos la siguiente línea:
# Borramos env('DB_DATABASE',)'sqlite'=>['driver'=>'sqlite','url'=>env('DATABASE_URL'),'database'=>env('DB_DATABASE',database_path('database.sqlite')),# Y queda de la siente forma'sqlite'=>['driver'=>'sqlite','url'=>env('DATABASE_URL'),'database'=>database_path('database.sqlite'),
TDD -> Desarrollo a base de prueba
Amigo, siempre andas comentando por comentar. Tus comentarios bordean la línea del SPAM.
Creo que estas equivocada, yo cuando comento algo o digo algo es para mi o para agradecer los post de los demas
Puedes usar
php artisan make:model Post-a
para crear el modelo, migration, seeder, factory y un controlador de tipo resource
Saludos y cualquier critica constructiva y retroalimentación me ayudaría a seguir mejorando.
súper!, gracias por el aporte!, una recomendación, deja escrito a qué versión de Laravel corresponden las notas, esto para que posteriormente si algo no funciona y estás trabajando en una versión diferente, estés al tanto de que los comandos pertenecían a "aquella" versión, por ejemplo: php artisan test es un comando válido desde Laravel 7.x, en versiones anteriores el mismo no existía, saludos!
Hola ecedenyo :D Me parece muy valida tu recomendación con lo de las versiones, lo agregare a mis apuntes desde ahora. Gracias!
php artisan make:test NameClassTest para crear nuestra clase de prueba
php artisan make:controller Api/PostController --api --model=Post me crea en controller con los metodos api y se conecta al modelo Post, esto es muy versatil y comodo
.env es archivo para condifuracion de nuestra base de datos y otra opciones generales de la aplicacion en laravel
Al colocar la misma entender que se esta testeando
cendor/bin/phpunit para correr los test en laravel
phpunit.xml es donde se configura PhpUNIT para hacer las pruebas unitarias y TDD
php artisan make:model Post -fm create el modelo Post nuestro archivo factory y archivo de migracion
Las pruebas son un trabajo necesario, y los programadores que vean el codigo del proyectos nos lo van a agradecer
Creando configuracion inicial
Creando test para los posts y emulamos la ruta del controller
$ php artisan make:test Http/Controllers/Api/PostControllerTest
Creamos el modelo, con su migracion y su factory
$ php artisan make:model Post -fm
Crea el controller dentro de la carpeta api
Crea solo los metodos de una api, y conecta el model a este controller
$ php artisan make:controller Api/PostController --api --model
Para hacer las pruebas necesitaremos otra base de datos, donde en cada prueba al iniciar se llenara de datos y al terminarla se va a vaciar
Crea el siguiente archivo database/database.sqlite
Configuramos el archivo config/database.php para encontrar el de database.sqlite
'sqlite' => [ 'driver' => 'sqlite', 'url' => env('DATABASE_URL'), 'database' => database_path('database.sqlite'), #'database' => env('DB_DATABASE', database_path('database.sqlite')), 'prefix' => '', 'foreign_key_constraints' => env('DB_FOREIGN_KEYS', true),],
En el archvio phpunix.xml vemos que ya estamos conectados a sqlite
<server name="DB_CONNECTION" value="sqlite"/>
¿Porque el profe cubre el APP_KEY del proyecto?, ¿que tanta importancia tiene?
¡Hola Javier! La APP_KEY o cualquier otra clave de acceso de tu proyecto es muy importante, porque con esta cualquier otra persona puede acceder a tu base de datos y modificar, borrar o robar los datos personales de tus usuarios o clientes.
Oh genial, muchas gracias no sabia eso ...
Es la primera vez que aplico TDD, inquieto por ver los beneficios que nos aporta.
Si teneis el error SQLSTATE[HY000] [1045] Access denied for user ‘username’@‘localhost’ (using password: YES), comprobad si en el fichero phpunit.xml en el nodo <PHP> teneis la siguiente configuracion.
El api.php es para definir las rutas del API, mientras que web.php es para definir las rutas del app que se muestra en los navegadores, básicamente en el controlador para el api, no son necesarios los métodos de show ni index, mientras que para el app sí, ya que en app se muestran cosas al navegador y en el api no.