Sök…
Introduktion
Att skriva testbar kod är en viktig del av att bygga ett robust, underhållbart och smidigt projekt. Support för PHP: s mest använda testram , PHPUnit , är inbyggt i Laravel. PHPUnit konfigureras med filen phpunit.xml
, som finns i rotkatalogen för varje nytt Laravel-program.
tests
, även i rotkatalogen, innehåller de enskilda testfilerna som har logiken för att testa varje del av din applikation. Naturligtvis är det ditt ansvar som utvecklare att skriva dessa tester när du bygger din ansökan, men Laravel innehåller en exempelfil, ExampleTest.php
, för att komma igång.
<?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');
}
}
I testBasicExample()
besöker vi webbplatsens indexsida och ser till att vi ser texten Laravel 5
någonstans på den sidan. Om texten inte finns, kommer testet att misslyckas och genererar ett fel.
Testa utan mellanprogram och med en ny databas
För att göra hantverkare migrera en ny databas innan du kör tester, use DatabaseMigrations
. use WithoutMiddleware
om du vill undvika middleware som Auth.
<?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');
}
}
Databastransaktioner för flera databasanslutningar
DatabaseTransactions
drag gör det möjligt för databaser att återföra alla ändringar under testerna. Om du vill rulla tillbaka flera databaser måste du ställa in $connectionsToTransact
-anslutningarToTransaktegenskaper
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');
}
}
Testar installationen, använder i minnesdatabasen
Följande installation säkerställer att testramverket (PHPUnit) använder :memory:
databas.
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>
Konfiguration
Filen phpunit.xml är standardkonfigurationsfilen för tester och är redan inställd för testning med PHPUnit.
Standard APP_ENV
definieras som att testing
med array
är CACHE_DRIVER
. Med denna inställning kommer inga data (session / cache) att behållas vid testning.
För att utföra tester mot en specifik miljö som hembygd kan standardvärdena ändras till:
<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"/>
Eller för att använda en tillfällig i minnesdatabasen:
<env name="DB_CONNECTION" value="sqlite"/>
<env name="DB_DATABASE" value=":memory:"/>
En sista anmärkning att tänka på från Laravel-dokumentationen :
Se till att rensa din konfigurationscache med
config:clear
Artisan-kommandot innan du kör dina test!