2012-09-18 23 views
5

Silex için phpunit kullanarak bazı testler yazmaya çalışıyorum.Silex & phpunit JSON yanıtı

Bir Crawler nesnesi oluşturan Symfony \ Component \ BrowserKit \ Client sınıfım var.

Bu nesne, istemcinin sonuçlarının xhtml olmasını bekler, ancak test yapmaya çalıştığım api'm JSON'u döndürür ve tarayıcı buna izin vermez.

Silex veya phpunit'te JSON ile çalışacak veya kendiminkini yapmak zorunda kalacak yerleşik bir sınıf var mı?

Alkış

cevap

22

var json başa çıkmak için özel bir şey değil, ancak tarayıcısını kullanmadan istemcisi kullanabilirsiniz. Basitçe bu gibi yanıt almak için istemci üzerinde getResponse() çağırır:

$client = $this->createClient(); 
$client->request('GET', '/'); 
$response = $client->getResponse(); 

$data = json_decode($response->getContent(), true); 
$this->assertSame(array('id' => 1, 'name' => 'igorw'), $data['users'][0]); 

Sana Test davayla ilgili yardımcı yöntem haline bu mantığı taşımak ve bu kullanmanızı öneririz. Symfony'nin 2 Tarayıcı Kiti kullanım HTTP_ACCEPT yerine ACCEPT yerine CONTENT_TYPE arasında HTTP_CONTENT_TYPE bir JSON isteği göndermek için

+0

Süper çok teşekkür ederim,: İşte bazı $data ile POST isteği göndermek için bir örnektir –

0

.

$client->request(
    $method = 'POST', 
    $uri, 
    $parameters = array(), 
    $files = array(), 
    $server = array(
     'HTTP_CONTENT_TYPE' => 'application/x-www-form-urlencoded; charset=UTF-8', // for sending urlencoded data 
     //or 'HTTP_CONTENT_TYPE' => 'application/json', // for sending JSON data 
     'HTTP_ACCEPT'  => 'application/json',  
    ), 
    $content = $data, 
    $changeHistory = true 
); 

$response = $client->getResponse(); 
$response_data = json_decode($response->getContent(), true);