Recherche…


introduction

L'écriture de code testable est un élément important de la construction d'un projet robuste, maintenable et agile. La prise en charge du framework de test PHP le plus utilisé, PHPUnit , est intégrée à Laravel. PHPUnit est configuré avec le fichier phpunit.xml , qui réside dans le répertoire racine de chaque nouvelle application Laravel.

Le répertoire tests , également dans le répertoire racine, contient les fichiers de test individuels contenant la logique permettant de tester chaque partie de votre application. Bien entendu, il est de votre responsabilité en tant que développeur d’écrire ces tests lorsque vous construisez votre application, mais Laravel inclut un exemple de fichier, ExampleTest.php , pour vous ExampleTest.php à démarrer.

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

Dans la méthode testBasicExample() , nous visitons la page d'index du site et nous nous assurons que le texte Laravel 5 quelque part sur cette page. Si le texte n'est pas présent, le test échouera et générera une erreur.

Test sans middleware et avec une nouvelle base de données

Pour que l'artisan migre une nouvelle base de données avant de lancer des tests, use DatabaseMigrations . Aussi, si vous voulez éviter les middleware comme 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');
    }
}

Transactions de base de données pour une connexion à plusieurs bases de données

DatabaseTransactions trait DatabaseTransactions permet aux bases de données d'annuler toutes les modifications pendant les tests. Si vous souhaitez restaurer plusieurs bases de données, vous devez définir $connectionsToTransact propriétés $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');
    }
}

Configuration du test, utilisation de la base de données en mémoire

La configuration suivante garantit que le framework de test (PHPUnit) utilise :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>

Configuration

Le fichier phpunit.xml est le fichier de configuration par défaut pour les tests et est déjà configuré pour les tests avec PHPUnit.

L'environnement de test par défaut APP_ENV est défini comme testing avec array comme pilote de cache CACHE_DRIVER . Avec cette configuration, aucune donnée (session / cache) ne sera conservée pendant le test.

Pour exécuter des tests sur un environnement spécifique tel que homestead, les valeurs par défaut peuvent être modifiées comme suit:

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

Ou pour utiliser une base de données temporaire en mémoire :

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

Une dernière remarque à retenir de la documentation de Laravel :

Veillez à vider votre cache de configuration en utilisant la commande config:clear Artisan avant de lancer vos tests!



Modified text is an extract of the original Stack Overflow Documentation
Sous licence CC BY-SA 3.0
Non affilié à Stack Overflow