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 DAMADoctrineTestBundle
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.
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
<?php
namespace App\Tests\Api;
use ApiPlatform\Symfony\Bundle\Test\ApiTestCase;
class RegisterTest extends ApiTestCase
{
public function testSomething(): void
{
$response = static::createClient()->request('POST', '/api/register', [
'json' => [
'email' => 'test@test.fr',
'password' => 'test',
],
'headers' => [
'Content-Type' => 'application/ld+json',
]
]);
$this->assertResponseStatusCodeSame(422);
$this->assertJsonContains(['description' =>'password: This value is too short. It should have 10 characters or more.']);
}
}