API-Integrationstests mit ApiTestCase
API-Integrationstests mit ApiTestCase
~16 Min. Lesezeit Zuletzt aktualisiert am 8. August 2026
GENAU wie die Symfony-Schulung (Kapitel 44) WebTestCase für HTTP-Tests nutzte, bringt API Platform eine SPEZIALISIERTE ApiTestCase-Basisklasse MIT, die JSON-LD-spezifische Assertions ERGÄNZT.
Das Test-Paket prüfen
docker compose exec php composer require --dev api-platform/testMeist BEREITS Teil der api-platform-Distribution – der Befehl installiert es NACHTRÄGLICH, falls NICHT VORHANDEN.
Den ersten Test schreiben
<?php
declare(strict_types=1);
namespace App\Tests;
use ApiPlatform\Symfony\Bundle\Test\ApiTestCase;
final class ProjectResourceTest extends ApiTestCase
{
public function testGetCollection(): void
{
$response = static::createClient()->request('GET', '/api/projects');
self::assertResponseIsSuccessful();
self::assertResponseHeaderSame('content-type', 'application/ld+json; charset=utf-8');
self::assertJsonContains(['@context' => '/api/contexts/Project']);
}
}assertJsonContains ist die WICHTIGSTE Ergänzung GEGENÜBER klassischen WebTestCase-Assertions – sie prüft, DASS die genannten Schlüssel/Werte im JSON VORKOMMEN, OHNE die GESAMTE Antwort exakt vergleichen zu müssen.
Gegen das JSON-Schema validieren
public function testGetCollectionMatchesSchema(): void
{
static::createClient()->request('GET', '/api/projects');
self::assertMatchesResourceCollectionJsonSchema(\App\Entity\Project::class);
}assertMatchesResourceCollectionJsonSchema validiert die Antwort GEGEN das AUTOMATISCH aus #[ApiResource] ABGELEITETE JSON-Schema – ÄNDERT sich SPÄTER VERSEHENTLICH die Struktur (z. B. ein Feld VERGESSEN umzubenennen), SCHLÄGT DIESER Test SOFORT fehl.
Einen schreibenden Test
public function testCreateProject(): void
{
static::createClient()->request('POST', '/api/projects', [
'json' => ['name' => 'Testprojekt'],
'headers' => ['Content-Type' => 'application/ld+json'],
]);
self::assertResponseStatusCodeSame(201);
self::assertJsonContains(['name' => 'Testprojekt']);
}Achtung: OHNE Authentifizierung (Block 6) SCHLÄGT dieser Test AKTUELL mit 401 fehl – Kapitel 94 zeigt, WIE Testnutzer und Tokens für Tests bereitgestellt werden, DAMIT authentifizierte Endpunkte TESTBAR bleiben.
Die Tests ausführen
docker compose exec php bin/phpunitTipp: ApiTestCase ERBT von KernelTestCase (GENAU wie WebTestCase in der Symfony-Schulung) – static::createClient() bootet die GESAMTE Anwendung in einer isolierten Test-Umgebung, mit einer EIGENEN Datenbank-Verbindung (.env.test), die von der Entwicklungsdatenbank GETRENNT bleibt.