Test unitaire et fonctionnel avec Symfony

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.

Retour en haut