Pour lancer un test unitaire (cela suppose que vous avez installé ce qu’il faut pour lancer les tests):
./bin/phpunit #pour lancer un test en particulier ./bin/phpunit tests/Utils/HelperTest.php //indiquer le chemin complet
Pour les tests fonctionnels, on va faire comme si on avait un navigateur (mais ce n’est pas un vrai navigateur au sens où l’on démarre vraiment Google Chrome ou Firefox, pour ça il faut voir le plugin Panther)
Le cod eminimal pour ce genre de test est :
<?php namespace App\Tests\Controller; use Symfony\Bundle\FrameworkBundle\Test\WebTestCase; use App\Controller\SecurityController; class RouteTest extends WebTestCase { public function testLoginRoute() { $client = static::createClient(); $client->request('GET', '/login'); $this->assertEquals(200, $client->getResponse()->getStatusCode()); } }
En fait on se sert du code PHP directement pour faire le rendu logique de la page. Pour se logger on fera de la manière suivante :
public function testAdminLoginToApp() { $client = static::createClient([], [ 'PHP_AUTH_USER' => 'moi@mail.com', 'PHP_AUTH_PW' => 'monpass', ]); // go to dashboard $crawler = $client->request('GET', '/dashboard'); $elem = $crawler->filter('html > body > div > h1'); // Verify the text in h1 as a proof i'm in $this->assertEquals('Dashboard', $elem->text()); }
A la création du client, on injecte les identifiant et mot de passe, et on est loggé. Ensuite on émule le crawler en lui passant une requête de type GET. Puis on va explorer le DOM en utilisant la fonction filter
pour extraire un élément du DOM
Suivre une redirection
Il est possible de suivre une redirection :
$crawler = $client->request('GET', '/dashboard'); $crawler = $client->followRedirect(); $elem = $crawler->filter('html > body > div > h1');
Les tests fonctionnels peuvent prendre du temps, à la différence des test unitaires, vous pouvez vous rendre compte du temps avec la commande shell suivante :
time ./bin/phpunit
Restreindre le coverage des tests
Dans le fichier phpunit.xml.dist, vous pouvez indiquer les répertoires dont les tests seront exécutés.