Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/234.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/go/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHPUnit-Guzzle:API调用未返回所需的响应_Php_Phpunit_Guzzle_Guzzle6 - Fatal编程技术网

PHPUnit-Guzzle:API调用未返回所需的响应

PHPUnit-Guzzle:API调用未返回所需的响应,php,phpunit,guzzle,guzzle6,Php,Phpunit,Guzzle,Guzzle6,我正在使用PHPUnit和Guzzle测试REST api,如果数据库中没有可用的用户名(传入请求参数),它会在数据库中创建一个新记录,并以JSON发送响应,如下所示: { "success": true, "id": "<unique_ID>" } { "success": false, "error": "username is already available" } 这是我的PHPUnit测试用例,用于测试上述API和Guzzle: 这是一

我正在使用PHPUnit和Guzzle测试REST api,如果数据库中没有可用的
用户名
(传入
请求
参数),它会在数据库中创建一个新记录,并以JSON发送响应,如下所示:

{
    "success": true,
    "id": "<unique_ID>"
}
{
    "success": false,
    "error": "username is already available"
}
这是我的PHPUnit测试用例,用于测试上述API和Guzzle:

  • 这是一个
    设置
    功能,用于设置Guzzle客户端

    public function setUp()
    {
        $this->client = new GuzzleHttp\Client([
            'base_uri' => 'http://localhost/test/'
        ]);
    }
    
  • 这是实际的测试功能:

    public function testActualResult()
    {
        $response = $this->client->post('service.php', [
            'json' => [
                'operation' => 'create_user',
                'user_name' => 'testUser1'            
            ]
        ]);
    
        var_dump($response);
    }
    
  • 每当我测试它时,我都会得到如下响应:

    class GuzzleHttp\Psr7\Response#99 (6) {
      private $reasonPhrase =>
      string(2) "OK"
      private $statusCode =>
      int(200)
      private $headers =>
      array(5) {
        'Date' =>
        array(1) {
          [0] =>
          string(29) "Tue, 21 Nov 2017 10:27:22 GMT"
        }
        'Server' =>
        array(1) {
          [0] =>
          string(47) "Apache/2.4.26 (Win32) OpenSSL/1.0.2l PHP/5.6.31"
        }
        'X-Powered-By' =>
        array(1) {
          [0] =>
          string(10) "PHP/5.6.31"
        }
        'Content-Length' =>
        array(1) {
          [0] =>
          string(4) "1357"
        }
        'Content-Type' =>
        array(1) {
          [0] =>
          string(16) "application/json"
        }
      }
      private $headerNames =>
      array(5) {
        'date' =>
        string(4) "Date"
        'server' =>
        string(6) "Server"
        'x-powered-by' =>
        string(12) "X-Powered-By"
        'content-length' =>
        string(14) "Content-Length"
        'content-type' =>
        string(12) "Content-Type"
      }
      private $protocol =>
      string(3) "1.1"
      private $stream =>
      class GuzzleHttp\Psr7\Stream#86 (7) {
        private $stream =>
        resource(408) of type (stream)
        private $size =>
        NULL
        private $seekable =>
        bool(true)
        private $readable =>
        bool(true)
        private $writable =>
        bool(true)
        private $uri =>
        string(10) "php://temp"
        private $customMetadata =>
        array(0) {
        }
      }
    }
    
    但是我没有收到API调用本身发送回的期望响应

    如果我用POSTMAN测试我上面提到的API,它工作得很好,并返回所需的响应。

    您阅读了吗?在“快速启动”->“使用响应”下,描述了当您想要获取响应正文时,需要使用
    $response
    上的
    getBody()
    函数

    您所做的只是转储整个请求变量,其中包含的信息比您想要做的要多得多

    有关示例,请参见:

    $response = $client->post('your parameters here');
    $body = $response->getBody();
    echo $body;
    
    你看过报纸了吗?在“快速启动”->“使用响应”下,描述了当您想要获取响应正文时,需要使用
    $response
    上的
    getBody()
    函数

    您所做的只是转储整个请求变量,其中包含的信息比您想要做的要多得多

    有关示例,请参见:

    $response = $client->post('your parameters here');
    $body = $response->getBody();
    echo $body;
    

    这并不是对您问题的实际回答,但是:单元测试API被认为是不好的做法。单元测试应该测试类和代码,而不是它们的集成。如果API下降,单元测试应该仍然是绿色的。你应该考虑使用集成测试工具来测试这个。感谢@OptimusCrime,但是我看到很多例子/帖子,他们使用PHPUnit和Guzzle来测试api。没有人提到像你这样的人。例如,这并不是对您的问题的实际答案,但是:单元测试API被认为是不好的做法。单元测试应该测试类和代码,而不是它们的集成。如果API下降,单元测试应该仍然是绿色的。你应该考虑使用集成测试工具来测试这个。感谢@OptimusCrime,但是我看到很多例子/帖子,他们使用PHPUnit和Guzzle来测试api。没有人提到像你这样的人。例如,谢谢你的回复。但它仍然没有返回所需的响应。这就是它返回的
    class-GuzzleHttp\Psr7\Stream#86(7){private$Stream=>resource(408)类型(Stream)private$size=>NULL private$seekable=>bool(true)private$readable=>bool(true)private$writable=>bool(true)private$uri=>string(10)”php://temp“私有$customMetadata=>array(0){}”
    @TonyMontana您确定不
    var\u转储变量而不是对其进行eching吗?我可以验证
    getBody()
    是否以文本形式返回响应。好的,如果我使用
    json\u decode($response->getBody())
    ,我将得到预期的响应。但是如果不使用
    json\u decode
    我会得到上面提到的响应。感谢@OptimusCrime的建议,也感谢这篇博文,很抱歉这是
    json\u解码($response->getBody(),true)
    感谢回复。但它仍然没有返回所需的响应。这就是它返回的
    class-GuzzleHttp\Psr7\Stream#86(7){private$Stream=>resource(408)类型(Stream)private$size=>NULL private$seekable=>bool(true)private$readable=>bool(true)private$writable=>bool(true)private$uri=>string(10)”php://temp“私有$customMetadata=>array(0){}”
    @TonyMontana您确定不
    var\u转储变量而不是对其进行eching吗?我可以验证
    getBody()
    是否以文本形式返回响应。好的,如果我使用
    json\u decode($response->getBody())
    ,我将得到预期的响应。但是如果不使用
    json\u decode
    我会得到上面提到的响应。感谢@OptimusCrime的建议,也感谢这篇博文,很抱歉这是
    json\u解码($response->getBody(),true)