Buscar..
Introducción
Escribir códigos comprobables es una parte importante de la construcción de un proyecto robusto, fácil de mantener y ágil. El soporte para el marco de pruebas más utilizado de PHP, PHPUnit , está integrado directamente en Laravel. PHPUnit se configura mediante el archivo phpunit.xml
, que reside en el directorio raíz de cada nueva aplicación Laravel.
El directorio de tests
, también en el directorio raíz, contiene los archivos de prueba individuales que contienen la lógica para probar cada parte de su aplicación. Por supuesto, es tu responsabilidad como desarrollador escribir estas pruebas a medida que construyes tu aplicación, pero Laravel incluye un archivo de ejemplo, ExampleTest.php
, para ponerte en marcha.
<?php
use Illuminate\Foundation\Testing\WithoutMiddleware;
use Illuminate\Foundation\Testing\DatabaseMigrations;
use Illuminate\Foundation\Testing\DatabaseTransactions;
class ExampleTest extends TestCase
{
/**
* A basic functional test example.
*
* @return void
*/
public function testBasicExample()
{
$this->visit('/')
->see('Laravel 5');
}
}
En el método testBasicExample()
, visitamos la página de índice del sitio y nos aseguramos de ver el texto Laravel 5
algún lugar de esa página. Si el texto no está presente, la prueba fallará y generará un error.
Prueba sin middleware y con una base de datos nueva.
Para hacer que los artesanos migren una base de datos nueva antes de ejecutar pruebas, use DatabaseMigrations
. Además, si desea evitar el middleware como Auth, use WithoutMiddleware
.
<?php
use Illuminate\Foundation\Testing\WithoutMiddleware;
use Illuminate\Foundation\Testing\DatabaseMigrations;
class ExampleTest extends TestCase
{
use DatabaseMigrations, WithoutMiddleware;
/**
* A basic functional test example.
*
* @return void
*/
public function testExampleIndex()
{
$this->visit('/protected-page')
->see('All good');
}
}
Transacciones de base de datos para conexión de base de datos mutliple
DatabaseTransactions
rasgo DatabaseTransactions
permite a las bases de datos revertir todo el cambio durante las pruebas. Si desea revertir varias bases de datos, debe establecer $connectionsToTransact
propiedades $connectionsToTransact
use Illuminate\Foundation\Testing\DatabaseMigrations;
class ExampleTest extends TestCase
{
use DatabaseTransactions;
$connectionsToTransact =["mysql","sqlite"] //tell Laravel which database need to rollBack
public function testExampleIndex()
{
$this->visit('/action/parameter')
->see('items');
}
}
Configuración de prueba, utilizando en la base de datos de memoria
La siguiente configuración garantiza que el marco de prueba (PHPUnit) utiliza :memory:
base de datos.
config / database.php
'connections' => [
'sqlite_testing' => [
'driver' => 'sqlite',
'database' => ':memory:',
'prefix' => '',
],
.
.
.
./phpunit.xml
.
.
.
</filter>
<php>
<env name="APP_ENV" value="testing"/>
<env name="APP_URL" value="http://example.dev"/>
<env name="CACHE_DRIVER" value="array"/>
<env name="SESSION_DRIVER" value="array"/>
<env name="QUEUE_DRIVER" value="sync"/>
<env name="DB_CONNECTION" value="sqlite_testing"/>
</php>
</phpunit>
Configuración
El archivo phpunit.xml es el archivo de configuración predeterminado para las pruebas y ya está configurado para las pruebas con PHPUnit.
El entorno de prueba predeterminado APP_ENV
se define como testing
con una array
es el controlador de caché CACHE_DRIVER
. Con esta configuración, no se retendrán datos (sesión / caché) durante la prueba.
Para ejecutar pruebas en un entorno específico como homestead, los valores predeterminados se pueden cambiar a:
<env name="DB_HOST" value="192.168.10.10"/>
<env name="DB_DATABASE" value="homestead"/>
<env name="DB_USERNAME" value="homestead"/>
<env name="DB_PASSWORD" value="secret"/>
O para usar una base de datos temporal en la memoria :
<env name="DB_CONNECTION" value="sqlite"/>
<env name="DB_DATABASE" value=":memory:"/>
Una última nota a tener en cuenta a partir de la documentación de Laravel :
¡Asegúrese de borrar su caché de configuración usando el comando
config:clear
Artisan antes de ejecutar sus pruebas!