Ce repository contient tous les exemples mentionnés pendant la conférenc "Tests avancés" que j'ai eu l'occasion de produire pendant l'API Platform Con les 15 et 16 septembre 2022.
C'est du live, on est à l'oral, et un certain nombre d'erreurs se sont glissées dans mon talk :) Les voici :
- Les transactions sur les tests unitaires ne sont pas natives, il faut utiliser le trait
RefreshDatabaseTrait
. - Non, on n'utilise pas les fixtures de base (cela fait tellement longtemps que j'ai oublié ...) mais
hautelook/alice-bundle
avec des fixtures en yaml.
Tout est très bien expliqué dans cet article écrit par Loïc qui a justement implémenté cela chez nous : https://www.strangebuzz.com/en/blog/simple-api-mocking-with-the-symfony-http-client
Je suis en fait partie de cette documentation d'APIP, qui ajoute une authentification JWT dans la spec OpenAPI : https://api-platform.com/docs/core/jwt/
Voilà quelques exemples de codes utilisés chez nous :
// getAdminClient() fait appel à static::createClient()
$response = $this->getAdminClient()->request('GET', '/flavors');
self::assertResponseIsSuccessful();
self::assertCount(6, $response->toArray()['hydra:member']);
self::assertEquals(6, $response->toArray()['hydra:totalItems']);
// si entité classique
self::assertMatchesResourceCollectionJsonSchema(Flavor::class);
// si entité complexe (champs additionnels en fonction du rôle)
foreach ($response->toArray()['hydra:member'] as $flav) {
self::assertEqualsCanonicalizing(['@id', '@type', 'id', 'name', 'ram', 'core', 'disk', 'isPublic'], array_keys($flav));
self::assertTrue($flav['isPublic'], 'isPublic is always true for admin user');
}
Ajoutez un fichier rector.php
à la racine de votre repository avec :
<?php
declare(strict_types=1);
use Rector\Config\RectorConfig;
use Rector\Doctrine\Set\DoctrineSetList;
use Rector\Set\ValueObject\SetList;
use Rector\Symfony\Set\SensiolabsSetList;
use Rector\Symfony\Set\SymfonySetList;
return static function (RectorConfig $rectorConfig): void {
$rectorConfig->import(SetList::PHP_80); // use SetList::PHP_81 at migration and rerun
$rectorConfig->import(DoctrineSetList::ANNOTATIONS_TO_ATTRIBUTES);
$rectorConfig->import(SymfonySetList::ANNOTATIONS_TO_ATTRIBUTES);
$rectorConfig->import(SensiolabsSetList::FRAMEWORK_EXTRA_61);
};
Lisez .gitlab-ci.yml
;
Notamment les lignes de lancement des principaux outils présentés :)
Inspirez vous du fichier Makefile
ici, à copier à la racine de votre repository.
Pour voir les possibilités, lancez make help
dans le répertoire.