I started using PHPUnit and Guzzle to test some API but when I run the following unit test, I don't receive back the right json. What is wrong in the code?
<?php
require('vendor/autoload.php');
class TestAll extends PHPUnit_Framework_TestCase
{
protected $client;
protected function setUp()
{
$this->client = new GuzzleHttp\Client([
'base_uri' => 'https://url',
'verify' => false,
'headers' => ['Accept' => 'application/json']
]);
}
public function testGet_ValidInput_TestAllObject()
{
$response = $this->client->get('/test_all');
var_dump($response->getBody());
$this->assertEquals(200, $response->getStatusCode());
$data = json_decode($response->getBody(), true);
}
}
Here is what I am getting:
. 1 / 1 (100%)object(GuzzleHttp\Psr7\Stream)#39 (7) {
["stream":"GuzzleHttp\Psr7\Stream":private]=>
resource(1127) of type (stream)
["size":"GuzzleHttp\Psr7\Stream":private]=>
NULL
["seekable":"GuzzleHttp\Psr7\Stream":private]=>
bool(true)
["readable":"GuzzleHttp\Psr7\Stream":private]=>
bool(true)
["writable":"GuzzleHttp\Psr7\Stream":private]=>
bool(true)
["uri":"GuzzleHttp\Psr7\Stream":private]=>
string(10) "php://temp"
["customMetadata":"GuzzleHttp\Psr7\Stream":private]=>
array(0) {
}
}
From the docs:
The entity body object of a response can be retrieved by calling $response->getBody().
Also, looking at Guzzle code, it's clear it's returning an object which implements StreamInterface
:
/**
* Get the body of the message
*
* @return StreamInterface|null
*/
public function getBody();
What you need is to use json()
method which parses and returns JSON response body (already decoded). Try the following:
public function testGet_ValidInput_TestAllObject()
{
$response = $this->client->get('/test_all');
$this->assertEquals(200, $response->getStatusCode());
$data = $response->json();
var_dump($data);
}