Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Symfony web test case JSON

How can I run a webtestcase agains an API? The default guide regarding functional tests only give the following command:

$client = static::createClient();
$crawler = $client->request('GET', '/some-url');

The Crawler class is a DOM crawler. I checked the reference for the FrameworkBundle\Client class and I couldn't find a method that will allow me to make a request that returns raw Response. At least that way, I will be able to json_decode the output and do my tests.

What can I use to achieve this?

like image 925
Gasim Avatar asked Nov 30 '15 22:11

Gasim


2 Answers

After you do $client->request(...) call, you can do $client->getResponse() to get server response.

You can then assert status code and check it's contents, for example:

$client->request('GET', '/my-url');
$response = $client->getResponse();
$this->assertSame(200, $response->getStatusCode());
$responseData = json_decode($response->getContent(), true);
// etc...
like image 165
Igor Pantović Avatar answered Sep 27 '22 18:09

Igor Pantović


There is a PHPUnit\Framework\Assert::assertJson() method since this commit You can also test 'Content-Type' of response.

$response = $client->getResponse();
$this->assertTrue($response->headers->contains('Content-Type', 'application/json'));
$this->assertJson($response->getContent());
$responseData = json_decode($response->getContent(), true);
like image 28
Arno Avatar answered Sep 27 '22 18:09

Arno