10 - Tests

On va se focus uniquement sur la partie PHP ici On commence par:

  1. Créer une base de testarrow-up-right: dans mon cas, elle se nomme api_test , nous en reparlerons plus tard.

  2. on installe les dépendances:

    composer require --dev symfony/test-pack

Comme souvent, Symfony nous configure avec de très bonnes bases, et notre système de tests arrive prêt à l'usage.

Créer son premier tests

Il est possible d'utiliser la commande:

bin/console make:test

Ici, on voudra faire un ApiTestCase pour tester notre API.

De mon côté je l'appellerais Api\RegisterTest pour tester la route d'inscription.

Symfony nous génère un fichier du style:

<?php

namespace App\Tests\Api;

use ApiPlatform\Symfony\Bundle\Test\ApiTestCase;

class RegisterTest extends ApiTestCase
{
    public function testSomething(): void
    {
        $response = static::createClient()->request('GET', '/');

        $this->assertResponseIsSuccessful();
        $this->assertJsonContains(['@id' => '/']);
    }
}

On peut tenter de lancer ce premier test avec:

Et on a une belle erreur, car notre route / est en 404, cependant ça veut bien dire que nos tests sont opérationnel. Il faut maintenant le modifier.

Voici la doc de ma route "Register"

Il faut donc faire un POST sur /api/register avec un combo email / password, ce qui nous donne:

On relance nos tests

Encore une erreur, cela vient du fait que la validation n'est pas OK. C'est souvent une bonne idée de tester les règles d'erreurs, donc plutôt que modifier les données pour rendre le test valide, on va changer les "Assertions".

Voilà, ici on test désormais que nous avons une réponse en 422, avec notre JSON qui contient bien la description de l'erreur.

Nos tests sont désormais valide.

On va en ajouter un deuxième qui cette fois ci "valide" la création d'un compte:

Si nous le lancons une fois: succès tout fonctionne, par contre la deuxième fois si votre système est bien prévu, vous devriez avoir une erreur, et pour cause: l'utilisateur créé dans notre premier test est toujours présent dans notre base de tests.

Pour éviter cela, une fois de plus la communauté symfony à déjà tout prévu, il nous suffit d'installer DAMADoctrineTestBundlearrow-up-right

Une fois installé, vidé votre base de données, et vous pouvez désormais relancer vos tests autant que voulu, DAMA se charge de garder votre BDD intacte !

Et voilà vous pouvez décliner les tests sur le reste de l'app.

circle-info

Vous pouvez executer du code "classique" dans vos tests, rien ne vous empêche de créer un utilisateur et récupérer son ticket si vous avez besoin d'être authentifié dans vos tests

Last updated