Szukaj…


Wprowadzenie

Pisanie testowalnego kodu jest ważną częścią budowania solidnego, łatwego w utrzymaniu i zwinnego projektu. Obsługa najczęściej używanego frameworka testowego PHP, PHPUnit , jest wbudowana bezpośrednio w Laravela. PHPUnit jest konfigurowany przy użyciu pliku phpunit.xml , który znajduje się w katalogu głównym każdej nowej aplikacji Laravel.

Katalog tests , również w katalogu głównym, zawiera pojedyncze pliki testowe, które zawierają logikę do testowania każdej części aplikacji. Oczywiście Twoim obowiązkiem jako programisty jest napisanie tych testów podczas tworzenia aplikacji, ale Laravel zawiera przykładowy plik, ExampleTest.php , aby rozpocząć.

<?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');
    }
}

W testBasicExample() odwiedzamy stronę indeksu witryny i upewniamy się, że gdzieś na tej stronie widzimy tekst Laravel 5 . Jeśli tekst nie jest obecny, test zakończy się niepowodzeniem i wygeneruje błąd.

Testuj bez oprogramowania pośredniego i ze świeżą bazą danych

Aby rzemieślnik przeprowadził migrację świeżej bazy danych przed uruchomieniem testów, use DatabaseMigrations . Ponadto, jeśli chcesz uniknąć oprogramowania pośredniego, takiego jak 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');
    }
}

Transakcje bazy danych dla wielu połączeń z bazą danych

Funkcja DatabaseTransactions pozwala bazom danych cofnąć wszystkie zmiany podczas testów. Jeśli chcesz wycofać wiele baz danych, musisz ustawić właściwości $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');
    }
}

Testowanie konfiguracji przy użyciu bazy danych pamięci

Następująca konfiguracja zapewnia, że środowisko testowe (PHPUnit) używa :memory: baza danych.

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>

Konfiguracja

Plik phpunit.xml jest domyślnym plikiem konfiguracyjnym do testów i jest już skonfigurowany do testowania z PHPUnit.

Domyślne środowisko testowe APP_ENV jest zdefiniowane jako testing z array będącą sterownikiem pamięci podręcznej CACHE_DRIVER . Dzięki tej konfiguracji żadne dane (sesja / pamięć podręczna) nie zostaną zachowane podczas testowania.

Aby uruchomić testy w określonym środowisku, takim jak domostwo, wartości domyślne można zmienić na:

<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"/>

Lub użyć tymczasowej bazy danych w pamięci :

<env name="DB_CONNECTION" value="sqlite"/>
<env name="DB_DATABASE" value=":memory:"/>

Ostatnia uwaga, o której należy pamiętać w dokumentacji Laravela :

Przed uruchomieniem testów wyczyść pamięć podręczną konfiguracji za pomocą polecenia config:clear Artisan!



Modified text is an extract of the original Stack Overflow Documentation
Licencjonowany na podstawie CC BY-SA 3.0
Nie związany z Stack Overflow