Ricerca…
introduzione
Scrivere un codice verificabile è una parte importante della costruzione di un progetto robusto, manutenibile e agile. Il supporto per PHP, il framework di test più diffuso, PHPUnit , è integrato direttamente in Laravel. PHPUnit è configurato utilizzando il file phpunit.xml
, che risiede nella directory radice di ogni nuova applicazione Laravel.
La directory dei tests
, anche nella directory root, contiene i singoli file di test che contengono la logica per testare ogni parte della tua applicazione. Ovviamente, è responsabilità dell'utente come sviluppatore scrivere questi test mentre costruisci la tua applicazione, ma Laravel include un file di esempio, ExampleTest.php
, per aiutarti.
<?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');
}
}
Nel metodo testBasicExample()
, visitiamo la pagina dell'indice del sito e ci assicuriamo di vedere il testo Laravel 5
da qualche parte su quella pagina. Se il testo non è presente, il test fallirà e genererà un errore.
Test senza middleware e con un nuovo database
Per rendere artigianale la migrazione di un nuovo database prima dell'esecuzione dei test, use DatabaseMigrations
. Inoltre, se vuoi evitare il middleware come 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');
}
}
Transazioni di database per connessione a più server
DatabaseTransactions
tratto DatabaseTransactions
consente ai database di eseguire il rollback di tutte le modifiche durante i test. Se si desidera eseguire il rollback di più database, è necessario impostare $connectionsToTransact
properties
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');
}
}
Test di installazione, utilizzando nel database di memoria
La seguente installazione assicura che il framework di test (PHPUnit) usi :memory:
database.
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>
Configurazione
Il file phpunit.xml è il file di configurazione predefinito per i test ed è già configurato per il test con PHPUnit.
L'ambiente di test predefinito APP_ENV
è definito come testing
con array
rappresenta il driver cache CACHE_DRIVER
. Con questa configurazione, nessun dato (sessione / cache) verrà mantenuto durante il test.
Per eseguire test su un ambiente specifico come homestead, i valori predefiniti possono essere modificati in:
<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 per utilizzare un database temporaneo in memoria :
<env name="DB_CONNECTION" value="sqlite"/>
<env name="DB_DATABASE" value=":memory:"/>
Un'ultima nota da tenere a mente dalla documentazione di Laravel :
Assicurati di svuotare la cache di configurazione usando la
config:clear
comando Artisan prima di eseguire i test!