我开始使用PHPUnit和Guzzle来测试一些API,但是当我运行下面的单元测试时,我没有收到正确的json。代码中有什么问题?
<?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);
}
}
这是我得到的:
. 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:
响应的实体主体对象可以通过调用$response->getBody()来检索。
另外,看看Guzzle代码,很明显它返回了一个实现StreamInterface
的对象:
/**
* Get the body of the message
*
* @return StreamInterface|null
*/
public function getBody();
你需要的是使用json()
方法,它解析并返回JSON响应体(已经解码)。试试以下命令:
public function testGet_ValidInput_TestAllObject()
{
$response = $this->client->get('/test_all');
$this->assertEquals(200, $response->getStatusCode());
$data = $response->json();
var_dump($data);
}