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!



Modified text is an extract of the original Stack Overflow Documentation
Licensierat under CC BY-SA 3.0
Inte anslutet till Stack Overflow