2014-03-19 3 views
7

ist. Ich habe Testing im Symfony2-Buch gelesen, aber ich fand keinen nützlichen, um dies zu tun. Ich erstelle Test für Controller in meiner Anwendung und dies ist der Controller (nur ein entsprechender Code) ich versuche zu testen:Symfony2: Überprüfen Sie, ob der JSON-Wert als Antwort vorliegt und ob er im Test

public function createCompanyAction(Request $request) { 
    $response = array(); 
    $response["success"] = false; 

    try { 
    if (statement) { 
      // do the magic here 
      $response["success"] = true; 
     } else { 
      $response['errors'] = "some error"; 
     } 
    } catch (Exception $ex) { 
     $response["exception"] = $ex->getMessage(); 
    } 

    return new JsonResponse($response); 
} 

Der Test wird nur passieren, wenn $response TRUE Wert in success Schlüssel hat, aber ich weiß nicht, wie das Controller von meinem Test zu überprüfen. Dies ist der Code, den ich habe:

$client->request('POST', '/create-company', $data); 
$response = $client->getResponse(); 

$this->assertEquals(200, $client->getResponse()->getStatusCode(), 'HTTP code is not 200'); 
$this->assertTrue($response->headers->contains('Content-Type', 'application/json'), 'Invalid JSON response'); 

$this->assertNotEmpty($client->getResponse()->getContent()); 

Wie überprüfe ich dies?

Antwort

10

Ich antworte mir. Suchen Trog Google fand ich JsonResponsetests und ich fand, wie es zu testen, so dass ich meinen Code in diese Transformation:

$client->request('POST', '/create-company', $data); 

$response = $client->getResponse(); 
// Test if response is OK 
$this->assertSame(200, $client->getResponse()->getStatusCode()); 
// Test if Content-Type is valid application/json 
$this->assertSame('application/json', $response->headers->get('Content-Type')); 
// Test if company was inserted 
$this->assertEquals('{"success":"true"}', $response->getContent()); 
// Test that response is not empty 
$this->assertNotEmpty($client->getResponse()->getContent()); 

ich noch nicht getestet, aber es kann funktioniert.

+7

Es ist besser, HTTP-Statuscodes nicht fest zu codieren. Es macht den Code im Laufe der Zeit weniger lesbar und wartbar. Ich empfehle, zu diesem Zweck Konstanten '\ Symfony \ Component \ HttpFoundation \ Response :: HTTP_OK' zu verwenden. –

Verwandte Themen