Getting Started
Getting Started
Laravel está construido teniendo el testing en cuenta, de hecho cuenta con soporte para testing con Pest y PhpUnit . El framework también incluye helpers que te permiten testear tu aplicación.
Por defecto, la aplicación incluye dos directorios en la carpeta tests , Feature y Unit , los unit tests son los tests que están pensados en un porción pequeña del código. De hecho, la mayoría de los tests unitarios se centren en un único método. Los tests dentro de “Unit” tests no levantan la aplicación (do not boot) y por lo tanto, son incapaces de acceder a la base de datos o a servicios del framework
Los Feature tests pueden testear una porción más larga del código, incluyendo como diferentes objetos interaccionan entre ellos o una petición HTTP completa a un endpoint JSON.
Generalmente, la mayoría de tus tests deberían ser feature tests. Estos tipos de tests proveen una mayor confianza que tu sistema funciona como lo esperado
Después de instalar Laravel, ejecuta vendor/bin/pest , vendor/bin/phpunit o php artisan test para correr los tests
Environment
Cuando corres los tests, Laravel automáticamente setea la configuración de entorno(.env) a testing debido a la variable de entorno definida en phpunit.xml .
Laravel también configura la session y el cache con el driver array por lo que la información de la sesión y la caché no será persistida durante los tests.
Puedes definir tus propias variables de testing en el archivo phpunit.xml , asegurate de ejecutar config:clear antes de correr tus tests, para evitar usar una config obsoleta cacheada previamente.
The .env.testing Environment File
Puedes crear un archivo .env.testing en el root de tu proyecto. Este archivo se usará cuando corres tests con Pest y PhpUnit o al ejecutar comandos Artisan con la opción --env=testing
Creating Tests
Para crear un nuevo caso de pueba, usa make:test . Por defecto los tests serán almacenados en tests/Feature
php artisan make:test UserTest
Si quieres crear un test unitario, tienes que añadir la opción --unit
php artisan make:test UserTest --unit
❗❗ Si vas a definir tus propios métodos setUp / tearDown dentro de una Clase de test, asegurate de llamar respectivamente a parent::setUp() / parent::tearDown() de la clase padre. Normalmente tienes que invocar parent::setUp() al principio de tu propio setUp y parent::tearDown() al final de tu propio tearDown
Running Tests
Para correr los tests:
./vendor/bin/pest
// or
./vendor/bin/phpunit
// or
php artisan test
// el test runner provee verbose reports
Cualquier opción pasada a pest o phpunit se le puede pasar también a artisan test
php artisan test --testsuite=Feature --stop-on-failure
Running Tests in Parallel
Por defecto, Laravel con Pest / Phpunit ejecuta los tests secuencialmente dentro de un único proceso, Puedes reducir considerablemente el tiempo de ejecución corriendo múltiples tests en múltiples procesos. Para empezar deberás instalar el paquete brianium/paratest como ‘dev’ dependency. Después incluye --parallel cuando ejecutes el comando artisan test
composer require brianium/paratest --dev
php artisan test --parallel
Por defecto, Laravel creará tantos procesos como CPU Cores tenga tu maquina, puedes ajustar el número de procesos con la opción --process
php artisan test --parallel --processes=4
❗ ❗Cuando corres tests en paralelo, algunas opciones de Pest / Phpunit no estarán disponibles (ej: —do-not-cache-result)
Parallel Testing and Databases
Tan pronto como hayas configurado una database connection, Laravel automáticamente manejara la creación y las migraciones de la base de datos para cada proceso paralelo que está corriendo. Las bases de datos tendrán un sufijo que sera un token único por proceso. Por ejemplo, si tienes dos procesos paralelos, laravel creara las bases de datos your_db_test_1 y your_db_test_2
Por defecto, las bases de datos de tests persistirán durante las llamadas al comando Artisan test , Por lo lo que serán usadas otra vez por las subsiguientes invocaciones de test . Sin embargo, Puedes recrearlas usando la opción --recreate-databases
php artisan test --parallel --recreate-databases
Parallel Testing Hooks
En ocasiones, puedes necesitar preparar ciertos recursos usados por las pruebas de tu aplicación por lo que podrán ser usados de manera segura por los distintos procesos
Usando la facade ParallelTesting puedes especificar el código a ejecutar en los metodos setUp y tearDown de un proceso o un caso de prueba (test case). La closure recibe las variables $token y $testCase que contienen el token del proceso y el actual caso de prueba (test case)
<?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
{
/**
* Bootstrap any application services.
*/
public function boot(): void
{
ParallelTesting::setUpProcess(function (int $token) {
// ...
});
ParallelTesting::setUpTestCase(function (int $token, TestCase $testCase) {
// ...
});
// Executed when a test database is created...
ParallelTesting::setUpTestDatabase(function (string $database, int $token) {
Artisan::call('db:seed');
});
ParallelTesting::tearDownTestCase(function (int $token, TestCase $testCase) {
// ...
});
ParallelTesting::tearDownProcess(function (int $token) {
// ...
});
}
}
Accessing the Parallel Testing Token
Si necesitas acceder al token del proceso en cualquier otra parte de la aplicación, puedes usar el método token de la facade ParallelTesting . Este token es una cadena única que identifica a un proceso de test individual y puede ser usado para segmentar los recursos a lo largo de los procesos en paralelo. Por ejemplo, Laravel automáticamente añade al final este token de las bases de datos de tests usadas en el testing paralelo.
$token = ParallelTesting::token();
Reporting Test Coverage
❗❗ Requiere Xdebug o PCOV
Cuando corres tus tests, puedes determinar si tus casos de prueba están actualmente cubriendo el código de tu aplicación y cuánto código está siendo usado cuando corres tus tests. Para ver esto, usar la opción --coverage
php artisan test --coverage --min=80.3
Profiling Tests
El comando de Artisan test incluye un mecanismo para saber los tests más lentos. Con la opción --profile puedes listar los diez tests más lentos, permitiendote investigar los tests que pueden mejorarse para mejorar la velocidad de tu test suite.
php artisan test --profile