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/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 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.json
con ENTER. Si has cometido algún error indica queno
quieres 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