No tienes acceso a esta clase

¡Continúa aprendiendo! Únete y comienza a potenciar tu carrera

Curso de Introducción a Laravel 6

Curso de Introducción a Laravel 6

Profesor Italo Morales F

Profesor Italo Morales F

Proyecto API con TDD: presentación y configuración inicial

29/37
Recursos

Aportes 33

Preguntas 2

Ordenar por:

¿Quieres ver más aportes, preguntas y respuestas de la comunidad?

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

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

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)

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.

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

<h1>Creando configuracion inicial</h1>
  • 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"/>

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?.

Interesante, veo que siempre se mantiene un orden en todo lo que hacemos, ya quiero ver como avanza la creaciond e esta API:D!

porque sqlite y no mysql? la de prueba y producción no pueden ser las mismas?

Me ha parecido confuso el tema de las bases de datos, utilizamos sqlite solo para las pruebas o también para el proyecto o tenemos que configurar mysql para cuando trabajemos con el proyecto? 😕

Proyecto API con TDD: presentación y configuración inicial

<h5>Test</h5>
  • Se entiende que este archivo es el que prueba específicamente app/Http/Controllers/Api/PostController.php

php artisan make:test Http/Controllers/Api/PostControllerTest

<h5>Factory y migración</h5>

php artisan make:model Post -fm

<h5>Controlador</h5>
  • Ordenando archivos, crenado un controlador de recursos y que se conecte de una vez con la entidad de Post:

php artisan make:controller Api/PostController --api --model=Post

<h5>Database</h5>
  • Configuraciones en config/database.php
'database' => database_path('database.sqlite'),
  • Se llena cuando comienza la prueba y se vacía cuando finaliza la prueba

Ejale 😃 👌

Hola a todos.
Tengo configurado mi entorno para pruebas tal y como se indica en la clase pero cuando corro las pruebas unitarias no se hacen en la BD sqlite sino en la que tengo configurada para mi proyecto…

asi luce mi config\database.php

'sqlite' => [
    'driver' => 'sqlite',
    'url' => env('DATABASE_URL'),
    'database' => database_path('database.sqlite'),
    'prefix' => '',
    'foreign_key_constraints' => env('DB_FOREIGN_KEYS', true),
 ],
          	

Asi está el archivo de pruebas phpunit.xml

    <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_MAILER" value="array"/>
        <server name="QUEUE_CONNECTION" value="sync"/>
        <server name="SESSION_DRIVER" value="array"/>
    </php>

Agradezco puedan ayudarme

Es necesario instalar sqlite para trabajar en el proyecto?

Excelente, para las pruebas usamos una BD en SQLITE

Una buena practica es tener la misma ruta para las pruebas y los archivos a probar
por ejemplo

Http / Controller / Api / PostController.php
<h1>Test:</h1>
Http / Controller / Api / PostControllerTest.php

Excelente curso, felicitaciones y saludos a Italo, Sin embargo en este módulo pienso que debió haberse concentrado en el tema de la API, y luego tener otro módulo o sección con el tema de TDD y no combinar los dos temas ya que son dos mundos que hay que dominar por separado y luego juntarlos.

¿A que se refiere Italo cuando habla de un controlador de recursos?

Estamos hablando de recursos estáticos o cada método lo considera un recurso.

¿Hay controladores diferentes a un controlador de recursos?

Emocionado de realizar un API con Laravel.

Que belleza de curso 😄

parámetro --api -> para crear un controlador de recursos con 5 métodos