Fernando Mejia
Italo Morales Fantone
ProfesorHector Vasquez
¿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.
vendor/bin/phpunit
¿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.
database.sqlite
'connections' => [ 'sqlite' => [ 'driver' => 'sqlite', ... 'database' => base_path('database/database.sqlite'), ] ]
¿Qué archivos básicos debemos preparar?
Para empezar desde cero, creamos varios archivos base que nos permitirán estructurar nuestro proyecto de manera lógica y ordenada:
Tests
php artisan make:test Http/Controllers/Happy/PostControllerTest
Modelo, Factory y Migración
php artisan make:model Post -mf
Controlador
php artisan make:controller Happy/PostController --resource
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!
Fernando Mejia
Italo Morales Fantone
ProfesorHector Vasquez
JONHATHAN ROLANDO RODAS LOPEZ
María Sierra
Jean Nuñez
Isaac Netero
Jean Nuñez
Mauricio Galvez
Sergio Ramirez
Mauricio Galvez
Javier Amaya Patricio
Emerson Cedeño
Javier Amaya Patricio
Jean Nuñez
Jean Nuñez
Jean Nuñez
Jean Nuñez
Jean Nuñez
Jean Nuñez
Jean Nuñez
Jean Nuñez
David Antonio Garcia Saaib
Francisco Javier Saavedra Alcala
Massimo Di Berardino
Francisco Javier Saavedra Alcala
Manuel Entrena Jimenez
Fernando Ariza Serrano
ELKIN YESID MORENO VELEZ
Cris Marilian Silva Castillo
Luis Fernando Ramírez Sánchez
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
php artisan make:controller Api/PostController --api --model=Post
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
-a de all (todo)
gracias, buen aporte
Test + Git = 💚
Aporte de la clase
https://www.evernote.com/l/Ap4iCzThCQZFZpYLgKM5jd6k29NnaFCWo4Y/
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.
<php> <server name=“APP_ENV” value=“testing”/> <server name=“BCRYPT_ROUNDS” value=“4”/> <server name=“CACHE_DRIVER” value=“array”/> <server name=“DB_CONNECTION” value=“sqlite”/> <server name=“DB_DATABASE” value=":memory"/> <server name="MAIL_DRIVER" value="array"/> <server name="QUEUE_CONNECTION" value="sync"/> <server name="SESSION_DRIVER" value="array"/> </php>
Una vez las añadí, funciono correctamente
Si nos concentramos en realizar una API en Laravel PHP por ejemplo seria bueno aclarar por que no me quedo claro en este video lo siguiente.
¿Qué diferencia hay entre Api.php y Web.php?.
¿Por que el uno crea un controlador de 5 métodos y el otro crea un controlador de 7 métodos?.
Hola, creo que este enlace resuelve todas esas dudas https://styde.net/10-caracteristicas-que-debes-conocer-de-los-controladores-en-laravel/
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.