Documentación de Laravel 10.x
Aquí encontrarás fragmentos de código de Laravel y consejos útiles sobre desarrollo web.
Laravel está construido teniendo en cuenta las pruebas. De hecho, el soporte para las pruebas con PHPUnit está incluido de serie y ya se ha configurado un archivo phpunit.xml
para tu aplicación. El framework también incluye métodos de ayuda convenientes que te permiten realizar pruebas de forma expresiva en tus aplicaciones.
De forma predeterminada, el directorio tests
de tu aplicación contiene dos directorios: Feature
y Unit
. Las pruebas unitarias son pruebas que se centran en una porción muy pequeña y aislada de tu código. De hecho, la mayoría de las pruebas unitarias probablemente se centren en un solo método. Las pruebas dentro de tu directorio de pruebas "Unit" no arrancan tu aplicación Laravel y, por lo tanto, no pueden acceder a la base de datos u otros servicios del framework.
Las pruebas de características pueden probar una porción más grande de tu código, incluido cómo interactúan varios objetos entre sí o incluso una solicitud HTTP completa a un punto final JSON. Generalmente, la mayoría de tus pruebas deberían ser pruebas de características. Estos tipos de pruebas proporcionan la mayor confianza en que tu sistema en su conjunto funciona como se pretende.
Se proporciona un archivo ExampleTest.php
en los directorios Feature
y Unit
. Después de instalar una nueva aplicación Laravel, ejecuta los comandos vendor/bin/phpunit
o php artisan test
para ejecutar tus pruebas.
Al ejecutar pruebas, Laravel configurará automáticamente el entorno de configuración en testing
debido a las variables de entorno definidas en el archivo phpunit.xml
. Laravel también configurará automáticamente la sesión y la caché con el controlador array
mientras se realizan las pruebas.
Eres libre de definir otros valores de configuración del entorno de pruebas según sea necesario. Las variables de entorno testing
se pueden configurar en el archivo phpunit.xml
de tu aplicación, pero asegúrate de limpiar la caché de configuración con el comando Artisan config:clear
antes de ejecutar tus pruebas.
.env.testing
Además, puedes crear un archivo .env.testing
en la raíz de tu proyecto. Este archivo se utilizará en lugar del archivo .env
al ejecutar pruebas PHPUnit o al ejecutar comandos Artisan con la opción --env=testing
.
CreatesApplication
Laravel incluye un rasgo CreatesApplication
que se aplica a la clase base TestCase
de tu aplicación. Este rasgo contiene un método createApplication
que inicia la aplicación Laravel antes de ejecutar tus pruebas. Es importante dejar este rasgo en su ubicación original, ya que algunas características, como la función de pruebas paralelas de Laravel, dependen de él.
Para crear un nuevo caso de prueba, utiliza el comando Artisan make:test
. De forma predeterminada, las pruebas se colocarán en el directorio tests/Feature
:
php artisan make:test UserTest
Si deseas crear una prueba dentro del directorio tests/Unit
, puedes usar la opción --unit
al ejecutar el comando make:test
:
php artisan make:test UserTest --unit
Si deseas crear una prueba Pest PHP, puedes proporcionar la opción --pest
al comando make:test
:
php artisan make:test UserTest --pestphp artisan make:test UserTest --unit --pest
Nota Las plantillas de prueba pueden personalizarse utilizando la publicación de plantillas.
Una vez que se haya generado la prueba, puedes definir los métodos de prueba como lo harías normalmente utilizando PHPUnit. Para ejecutar tus pruebas, ejecuta el comando vendor/bin/phpunit
o php artisan test
desde tu terminal:
<?php namespace Tests\Unit; use PHPUnit\Framework\TestCase; class ExampleTest extends TestCase{ /** * Un ejemplo básico de prueba. */ public function test_basic_test(): void { $this->assertTrue(true); }}
Advertencia Si defines tus propios métodos
setUp
/tearDown
dentro de una clase de prueba, asegúrate de llamar a los métodosparent::setUp()
/parent::tearDown()
respectivos en la clase padre.
Como se mencionó anteriormente, una vez que hayas escrito pruebas, puedes ejecutarlas con phpunit
:
./vendor/bin/phpunit
Además del comando phpunit
, puedes utilizar el comando Artisan test
para ejecutar tus pruebas. El ejecutor de pruebas Artisan proporciona informes detallados de pruebas para facilitar el desarrollo y la depuración:
php artisan test
Cualquier argumento que se pueda pasar al comando phpunit
también se puede pasar al comando Artisan test
:
php artisan test --testsuite=Feature --stop-on-failure
De forma predeterminada, Laravel y PHPUnit ejecutan las pruebas secuencialmente dentro de un solo proceso. Sin embargo, puedes reducir significativamente el tiempo que tardan tus pruebas al ejecutarlas simultáneamente en varios procesos. Para empezar, debes instalar el paquete Composer brianium/paratest
como una dependencia "dev". Luego, incluye la opción --parallel
al ejecutar el comando Artisan test
:
composer require brianium/paratest --dev php artisan test --parallel
De forma predeterminada, Laravel creará tantos procesos como núcleos de CPU estén disponibles en tu máquina. Sin embargo, puedes ajustar el número de procesos utilizando la opción --processes
:
php artisan test --parallel --processes=4
Advertencia Al ejecutar pruebas en paralelo, algunas opciones de PHPUnit (como
--do-not-cache-result
) pueden no estar disponibles.
Siempre que hayas configurado una conexión de base de datos principal, Laravel manejará automáticamente la creación y migración de una base de datos de prueba para cada proceso paralelo que ejecute tus pruebas. Las bases de datos de prueba llevarán un sufijo con un token de proceso único. Por ejemplo, si tienes dos procesos de prueba paralelos, Laravel creará y usará las bases de datos de prueba tu_db_test_1
y tu_db_test_2
.
De forma predeterminada, las bases de datos de prueba persisten entre las llamadas al comando Artisan test
para que puedan ser utilizadas nuevamente por invocaciones posteriores de test
. Sin embargo, puedes recrearlas utilizando la opción --recreate-databases
:
php artisan test --parallel --recreate-databases
En ocasiones, es posible que necesites preparar ciertos recursos utilizados por las pruebas de tu aplicación para que puedan ser utilizados de forma segura por varios procesos de prueba.
Usando la fachada ParallelTesting
, puedes especificar el código que se ejecutará en el setUp
y tearDown
de un proceso o caso de prueba. Los cierres dados reciben las variables $token
y $testCase
que contienen el token de proceso y el caso de prueba actual, respectivamente:
<?php namespace App\Providers; use Illuminate\Support\Facades\Artisan;use Illuminate\Support\Facades\ParallelTesting;use Illuminate\Support\ServiceProvider;use PHPUnit\Framework\TestCase; class AppServiceProvider extends ServiceProvider{ /** * Inicia cualquier servicio de la aplicación. */ public function boot(): void { ParallelTesting::setUpProcess(function (int $token) { // ... }); ParallelTesting::setUpTestCase(function (int $token, TestCase $testCase) { // ... }); // Se ejecuta cuando se crea una base de datos de prueba... ParallelTesting::setUpTestDatabase(function (string $database, int $token) { Artisan::call('db:seed'); }); ParallelTesting::tearDownTestCase(function (int $token, TestCase $testCase) { // ... }); ParallelTesting::tearDownProcess(function (int $token) { // ... }); }}
Si deseas acceder al "token" actual del proceso paralelo desde cualquier otra ubicación en el código de prueba de tu aplicación, puedes usar el método token
. Este token es un identificador único de cadena para un proceso de prueba individual y se puede utilizar para segmentar recursos entre procesos de prueba paralelos. Por ejemplo, Laravel añade automáticamente este token al final de las bases de datos de prueba creadas por cada proceso de prueba paralelo:
$token = ParallelTesting::token();
Al ejecutar las pruebas de tu aplicación, es posible que desees determinar si tus casos de prueba realmente están cubriendo el código de la aplicación y cuánto código de la aplicación se utiliza al ejecutar tus pruebas. Para lograr esto, puedes proporcionar la opción --coverage
al invocar el comando test
:
php artisan test --coverage
Puedes usar la opción --min
para definir un umbral mínimo de cobertura de pruebas para tu aplicación. El conjunto de pruebas fallará si no se alcanza este umbral:
php artisan test --coverage --min=80.3
El ejecutor de pruebas Artisan también incluye un mecanismo conveniente para listar las pruebas más lentas de tu aplicación. Invoca el comando test
con la opción --profile
para ver una lista de tus diez pruebas más lentas, lo que te permite investigar fácilmente qué pruebas se pueden mejorar para acelerar tu conjunto de pruebas:
php artisan test --profile