2016-04-13 5 views
0

Ich baue eine REST API mit Symfony2. Ich verwende bereits Liip bundle für meine Funktionstests zusammen mit Alice und Faker, um alle Fixtures zu generieren. Ich habe jedoch wenig Probleme, wenn ich POST-Aufrufe selbst testen möchte, solange JSON in den POST-Daten enthalten sind, was meine Funktionen ziemlich lang, hässlich und unlesbar macht.Symfony2 API Test POST mit YAML/Faker

habe ich beschlossen, die gefälschte JSON aus der Klasse zu bewegen, um sie zu YAML-Dateien konvertieren und laden sie dann Symfony Parser verwenden:

private function loadYaml($resource){ 
     $data = Yaml::parse(file_get_contents('src/AppBundle/DataFixtures/YAML/' . $resource . '.yml')); 
     return $data; 
} 

Das scheint ganz gut zu funktionieren, da ich sie leicht zurück konvertieren zu JSON-Objekten und dann verwenden Sie es in den Anruf:

$postData = json_encode($this->loadYaml('newapplication')); 
$this->client->request(
    'POST', 
    '/api/application/save/', 
    array('data' => $postData), // The Request parameters 
    array(), // Files 
    array(), 
    'mybody', // Raw Body Data 
    true 
); 

Meine erste Frage ist: Ist das ein richtiger Ansatz? Gibt es ein Bündel, das ich vermisst habe, das mein Leben viel einfacher machen wird?

Meine zweite Frage ist, ob es möglich sein wird, Faker innerhalb dieser YAML-Konstruktionen zu verwenden. Auf meinen Fixtures rufe ich Faker-Funktionen auf (z. B. < firstName()>), die beim Laden von Fixtures meine Entitäten automatisch mit zufälligen, aber aussagekräftigen Werten füllen. Wäre es möglich, sie in diesen YAML-Konstruktionen zu verwenden?

Vielen Dank! ;)

Antwort

0

Für Ihre Frage zu Bundle, WebTestCase von Symfony \ Bundle \ FrameworkBundle \ Test \ WebTestCase ist wirklich nett, Test auf REST API in Symfony Projekt zu tun.

Im POST sind Daten im Hauptteil und haben keine Parameter. (How are parameters sent in an HTTP POST request?)

Versuchen

$this->client->request(
    'POST', 
    '/api/application/save/', 
    array(), // The Request parameters 
    array(), // Files 
    array(), 
    $postData, // Raw Body Data 
    true 
); 
+0

In unserer Anwendung werden Daten innerhalb der Anforderungsparameter gesendet. Ich benutze WebTestCase von Liip Bundle, das ein paar interessante Funktionen hinzufügt. – MarcSitges