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:
- Nombre: yo llamaré a mi componente «styde/form», puedes colocarle [TU NOMBRE]/form o el nombre que prefieras.
- Descripción: debemos colocar cualquier descripción corta, por ejemplo: «Advanced form generation for Laravel» y presionar ENTER
- Autor: coloca tu nombre y tu correo y presiona ENTER
- Stability: esta es la estabilidad que vamos a aceptar de componentes de terceros, coloquemos «stable». ENTER.
- 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.
- License: utilicemos MIT, al igual que Laravel.
- 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.
- La primera dependencia que necesitamos es -sorpresa- php. Requeriremos la versión 7.2.5 o superior con
- Dev dependencies: a continuación nos va a pedir las dependencias de desarrollo:
- Instalaremos
phpunit/phpunitespecificando la versión^8.5. - Luego instalaremos
orchestra/testbenchen la versión que sea compatible con la versión de Laravel que estemos utilizando. Por ejemplo5.*es compatible con Laravel7.*. Puedes ver la tabla comparativa en la página de orchestra/testbench en GitHub.
- Instalaremos
- Para finalizar confirmemos la generación del archivo
composer.jsoncon ENTER. Si has cometido algún error indica quenoquieres confirmar y comienza de nuevo. - 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/:
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

