Componentes para Laravel

En esta lección vamos a comenzar la creación de un nuevo componente para PHP / Laravel utilizando Composer y PHPUnit.

Repositorio

Ver el código de esta lección en GitHub

Creación de una librería con Composer

Creemos un directorio con mkdir styde-form y vamos a dirigirnos a éste con cd styde-form.

A continuación ejecutemos composer init. Recibiremos el siguiente mensaje:

This command will guide you through creating your composer.json config.

Package name (<vendor>/<name>)

Debemos completar lo siguiente:

  1. Nombre: yo llamaré a mi componente «styde/form», puedes colocarle [TU NOMBRE]/form o el nombre que prefieras.
  2. Descripción: debemos colocar cualquier descripción corta, por ejemplo: «Advanced form generation for Laravel» y presionar ENTER
  3. Autor: coloca tu nombre y tu correo y presiona ENTER
  4. Stability: esta es la estabilidad que vamos a aceptar de componentes de terceros, coloquemos «stable». ENTER.
  5. Package Type: se refiere al tipo de paquete. Cuando creamos un nuevo «proyecto» nuestro paquete es de tipo «project». Para crear una nueva «librería» utilizaremos «library». ENTER.
  6. License: utilicemos MIT, al igual que Laravel.
  7. Dependencies: vamos a indicar qué queremos instalar las dependencias de forma recursiva presionando ENTER.
    • La primera dependencia que necesitamos es -sorpresa- php. Requeriremos la versión 7.2.5 o superior con ^7.2.5. Esta es la misma versión requerida por Laravel 7.
    • Luego laravel/framework (ENTER) y necesitamos la versión 7 o superior. Voy a especificar la versión "7.*" que es la más reciente al momento de grabar este video. Presionemos ENTER dos veces.
  8. Dev dependencies: a continuación nos va a pedir las dependencias de desarrollo:
    • Instalaremos phpunit/phpunit especificando la versión ^8.5.
    • Luego instalaremos orchestra/testbench en la versión que sea compatible con la versión de Laravel que estemos utilizando. Por ejemplo 5.* es compatible con Laravel 7.*. Puedes ver la tabla comparativa en la página de orchestra/testbench en GitHub.
  9. Para finalizar confirmemos la generación del archivo composer.json con ENTER. Si has cometido algún error indica que no quieres confirmar y comienza de nuevo.
  10. Install dependencies now: presiona ENTER nuevamente para instalar todas las dependencias indicadas previamente.

Configuración de autoload con Composer

A continuación vamos a configurar la «autocarga» en el archivo composer.json, como aprendimos en la lección Autocarga de clases con Composer y PSR-4:

    "autoload": {
        "psr-4": {
            "Styde\\": "src/"
        }
    },

Coloca estas líneas debajo de "require-dev": { },

También utilizaremos psr-4 para las pruebas, en el entorno de desarrollo:

    "autoload-dev": {
        "psr-4": {
            "Tests\\": "tests/"
        }
    },

Para finalizar ejecuta composer dump-autoload en el directorio de la librería.

Configuración de PHPUnit

Vamos a crear el directorio tests/ dentro de la raíz de nuestra librería.

Dentro del directorio tests/ vamos a crear la clase TestCase que va a extender de \PHPUnit\Framework\TestCase:

<?php

namespace Tests;

class TestCase extends \PHPUnit\Framework\TestCase
{

}

Además vamos a copiar el siguiente contenido al archivo phpunit.xml:

<?xml version="1.0" encoding="UTF-8"?>
<phpunit backupGlobals="false"
         backupStaticAttributes="false"
         bootstrap="vendor/autoload.php"
         colors="true"
         convertErrorsToExceptions="true"
         convertNoticesToExceptions="true"
         convertWarningsToExceptions="true"
         processIsolation="false"
         stopOnError="false"
         stopOnFailure="false"
         verbose="true"
>
    <testsuites>
        <testsuite name="Laravel Test Suite">
            <directory suffix="Test.php">./tests</directory>
        </testsuite>
    </testsuites>
    <filter>
        <whitelist processUncoveredFilesFromWhitelist="true">
            <directory suffix=".php">./src</directory>
        </whitelist>
    </filter>
</phpunit>

Escribiendo nuestra primera prueba unitaria

Para probar que todo lo anterior funcione, vamos a crear una prueba unitaria de prueba. Crea la clase TestUnitTest con lo siguiente:

<?php

namespace Tests;

class TestUnitTest extends TestCase
{
    /** @test */
    function test_unit_test()
    {
        $this->assertTrue(false);
    }
}

En la consola ejecuta vendor/bin/phpunit/:

Prueba fallando

La prueba falla porque hemos escrito $this->assertTrue(false).

assertTrue comprueba que el argumento pasado sea verdadero. Cambia el código por $this->assertTrue(true) y ejecuta la prueba nuevamente.

¡Si la prueba pasa estás listo para avanzar a la siguiente lección!

 

Regístrate hoy en Styde y obtén acceso a todo nuestro contenido.

Lección siguiente Realizando nuestra primera prueba con PHPUnit