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!