Suche…


Einführung

Das Schreiben von überprüfbarem Code ist ein wichtiger Bestandteil des Aufbaus eines robusten, wartbaren und agilen Projekts. Die Unterstützung des am weitesten verbreiteten Testframeworks von PHP, PHPUnit , ist direkt in Laravel integriert. PHPUnit wird mit der Datei phpunit.xml konfiguriert, die sich im Stammverzeichnis jeder neuen Laravel-Anwendung befindet.

Das tests , auch im Stammverzeichnis, enthält die einzelnen Testdateien, die die Logik zum Testen jedes Teils Ihrer Anwendung enthalten. Natürlich liegt es in Ihrer Verantwortung als Entwickler, diese Tests zu schreiben, während Sie Ihre Anwendung erstellen. Laravel enthält jedoch eine Beispieldatei ( ExampleTest.php , die Sie zum Laufen ExampleTest.php .

<?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 der testBasicExample() -Methode besuchen wir die testBasicExample() der Site und stellen sicher, dass der Text Laravel 5 irgendwo auf dieser Seite testBasicExample() . Wenn der Text nicht vorhanden ist, schlägt der Test fehl und generiert einen Fehler.

Testen Sie ohne Middleware und mit einer frischen Datenbank

use DatabaseMigrations um die Aktualisierung einer neuen Datenbank durch Handwerker vor dem Ausführen von Tests zu ermöglichen. Wenn Sie Middleware wie Auth vermeiden möchten, 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');
    }
}

Datenbanktransaktionen für mehrere Datenbankverbindungen

DatabaseTransactions Eigenschaft DatabaseTransactions können Datenbanken die Änderungen während der Tests rückgängig machen. Wenn Sie mehrere Datenbanken zurücksetzen möchten, müssen Sie $connectionsToTransact Eigenschaften von $connectionsToTransact festlegen

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

Testen der Einrichtung unter Verwendung der Speicherdatenbank

Das folgende Setup stellt sicher, dass das Testframework (PHPUnit) verwendet :memory: Datenbank.

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>

Aufbau

Die Datei phpunit.xml ist die Standardkonfigurationsdatei für Tests und ist bereits zum Testen mit PHPUnit eingerichtet.

Die Standardtestumgebung APP_ENV ist als testing definiert testing wobei das array der CACHE_DRIVER . Bei diesem Setup werden beim Testen keine Daten (Sitzung / Cache) gespeichert.

Um Tests in einer bestimmten Umgebung wie dem Homestead durchzuführen, können die Standardeinstellungen wie folgt geändert werden:

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

Oder verwenden Sie eine temporäre Datenbank in Arbeitsspeicher :

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

Eine letzte Bemerkung aus der Laravel-Dokumentation :

Löschen Sie Ihren Konfigurationscache unbedingt mit dem Befehl config:clear Artisan, bevor Sie die Tests ausführen!



Modified text is an extract of the original Stack Overflow Documentation
Lizenziert unter CC BY-SA 3.0
Nicht angeschlossen an Stack Overflow