PHPUnit Guzzle响应不工作


PHPUnit Guzzle Response not working

我开始使用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);
}