Zoeken…
Invoering
Het schrijven van testbare code is een belangrijk onderdeel van het bouwen van een robuust, onderhoudbaar en wendbaar project. Ondersteuning voor PHP's meest gebruikte testraamwerk , PHPUnit , is ingebouwd in Laravel. PHPUnit wordt geconfigureerd met behulp van het bestand phpunit.xml
, dat zich in de hoofdmap van elke nieuwe Laravel-toepassing bevindt.
De tests
, ook in de hoofdmap, bevat de afzonderlijke testbestanden die de logica bevatten voor het testen van elk gedeelte van uw toepassing. Natuurlijk is het uw verantwoordelijkheid als ontwikkelaar om deze tests te schrijven terwijl u uw applicatie bouwt, maar Laravel bevat een voorbeeldbestand, ExampleTest.php
, om u op weg te helpen.
<?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');
}
}
In de methode testBasicExample()
bezoeken we de indexpagina van de site en zorgen we ervoor dat we de tekst Laravel 5
ergens op die pagina zien. Als de tekst niet aanwezig is, zal de test mislukken en een fout genereren.
Test zonder middleware en met een nieuwe database
use DatabaseMigrations
om artisanaal een nieuwe database te laten migreren voordat tests worden uitgevoerd. Als je middleware zoals Auth wilt vermijden, 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');
}
}
Databasetransacties voor meervoudige databaseverbinding
DatabaseTransactions
eigenschap kunnen databases alle wijzigingen ongedaan maken tijdens de tests. Als u meerdere databases wilt terugdraaien, moet $connectionsToTransact
eigenschappen $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');
}
}
Testopstelling, gebruik in geheugendatabase
De volgende installatie zorgt ervoor dat het testraamwerk (PHPUnit) gebruikt :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>
Configuratie
Het phpunit.xml- bestand is het standaard configuratiebestand voor tests en is al ingesteld voor testen met PHPUnit.
De standaard testomgeving APP_ENV
is gedefinieerd als testing
met array
als CACHE_DRIVER
. Met deze instelling worden tijdens het testen geen gegevens (sessie / cache) bewaard.
Om tests uit te voeren tegen een specifieke omgeving zoals homestead, kunnen de standaardwaarden worden gewijzigd 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"/>
Of om een tijdelijke in de geheugendatabase te gebruiken:
<env name="DB_CONNECTION" value="sqlite"/>
<env name="DB_DATABASE" value=":memory:"/>
Een laatste opmerking om in gedachten te houden uit de Laravel-documentatie :
Zorg ervoor dat u uw configuratiecache leegmaakt met de opdracht
config:clear
Artisan voordat u uw tests uitvoert!