2017-11-21 14 views
0

username(passed in requestパラメータ)がまだdbで利用できない場合、PHPUnitとGuzzleを使用してDBに新しいレコードを作成するREST APIをテストしています。 PHPUnit - Guzzle:希望の応答を返していないAPI呼び出し

{ 
    "success": true, 
    "id": "<unique_ID>" 
} 

そして usernameはデシベルですでに利用可能であるならば、それは以下のようなJSONでレスポンスを送信します:それは以下のようなJSONでレスポンスを送信

{ 
    "success": false, 
    "error": "username is already available" 
} 

これは、テストするために、私はPHPUnitのテストケースであります上記のmがつがつ食うと一緒にentioned APIは:

  1. これはsetUp機能はがつがつ食うクライアント

    public function setUp() 
    { 
        $this->client = new GuzzleHttp\Client([ 
         'base_uri' => 'http://localhost/test/' 
        ]); 
    } 
    
  2. にセットアップするために使用され、これは、実際のテスト関数である:

    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呼び出し自体から返された応答が返されていません。

上記のAPIをPOSTMANでテストすると、完全に機能し、希望の応答が返されます。

+1

ないあなたの質問に、実際の答えは、しかし:

は、例えばUsing Responsesを参照してくださいユニットテストのAPI悪い習慣と考えられています。単体テストでは、クラスとコードを統合するのではなく、テストする必要があります。 APIがダウンすると、単体テストはまだ緑色になります。代わりに、統合テストツールを使用してこれをテストすることを検討する必要があります。この種の作業に適しています。 – OptimusCrime

+0

@OptimusCrimeありがとうございますが、PHPUnitとGuzzleを使用してAPIをテストしたサンプル/ポストが多数あります。誰もあなたのようなことは言及していません。 –

+0

https://stackoverflow.com/a/7564101/921563たとえば – OptimusCrime

答えて

2

あなたはGuzzlePHP documentationを読んでいますか? 「クイックスタート」 - >「レスポンスを使用する」では、レスポンスの本文を取得したいときは、$responsegetBody()関数を使用する必要があることが記述されています。

あなたがやっていることは、要求変数全体をダンプすることです。これには、実行したいことに必要な情報が含まれています。

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

返信ありがとうございます。しかし、それでも希望の応答は返されません。これは、タイプ(ストリーム)のリターン 'クラスGuzzleHttp \ Psr7 \ストリーム#86(7){ プライベート$ストリーム=> リソース(408) プライベート$サイズ=> NULL プライベート$のシークは何かということです=> ブール値(真) プライベート$読める=> BOOL(真) プライベート$書き込み可能=> BOOL(真) プライベート$ URI => 文字列(10) "PHP://一時" プライベート$ customMetadata => array(0){ } } ' –

+1

@TonyMontana変数をエッチするのではなく、変数を' var_dump'してもよろしいですか? 'getBody()'が応答をテキストとして返すことを確認できます。 – OptimusCrime

+0

'' json_decode($ response-> getBody()) 'を使うと、期待通りの応答が得られます。しかし、 'json_decode'を使用せずに、私は上記の応答を得ています。ありがとう@OptimusCrimeあなたの提案とまた、このブログの投稿はhttps://knpuniversity.com/screencast/rest/testing-phpunit –

関連する問題