2016-06-22 18 views
1

テスト中に 'progress'コールバックをトリガーするのに問題があります。Testing Guzzle 6ダウンロードの進捗状況

ここ

をテストするためのコードです:

$this->guzzleClient->request(
     'GET', 
     'http://example.com/somefile.csv', 
     [ 
      'sink' => $this->directory . $this->filename . '.csv', 
      'progress' => function ($download_size, $downloaded, $upload_size, $uploaded) { 
       $this->downloadProgress($download_size, $downloaded, $upload_size, $uploaded); 
      }, 
     ]); 

私は応答を模擬することができるよ、それはファイルが保存されますが、それは「進歩」をトリガーすることはありません。注:使用している応答オプションは、ライブサーバーから取得したものと同じです。

$mock = new MockHandler([ 
     new Response(
      '206', 
      [ 
       'content-type' => 'application/octet-stream', 
       'Content-Range' => 'bytes 1113-1113/11591523', 
      ], 
      new Stream(fopen(__DIR__ . '/test_stream_file.txt', 'r')) 
     ) 
    ]); 

    $handler = HandlerStack::create($mock); 
    $client = new Client(['handler' => $handler()]); 

私はちょうどそのモックファイルのダウンロードをテストして、それが私の唯一の選択肢だ場合は別途downloadProgressメソッドをテストし検討しています。

答えて

1

MockHandlerは「進歩の要求オプションを実装していません。

進行状況コールバックを起動するハンドラのテストは、Guzzleテストスイートの複製となります。具体的には、

  1. CurlFactoryTest::testEmitsProgress;そして
  2. StreamHandlerTest::testEmitsProgressInformation

あなたの目標は、コールバックが意図した操作を実行することを確認するためにテスト異なるテストにそれを分離することである場合。

ハンドラー機能をテストすることを目標とする場合は、Guzzle Test Suiteを参照してください。

CurlFactoryは、Windows以外のシステムのデフォルトハンドラです。

StreamHandlerは、Windowsシステムのデフォルトのハンドラです。

+0

最後に、 'downloadProgress'メソッドを個別にテストして解決しました。私はちょうど一緒にトリガーされて一緒にそれらをテストしたかっただろうが、私はダウンロードの進捗状況をテストしていたので、それは実際にそれを自分の上でそれをテストするようにテストする必要がいくつかの条件があった。 – jayEss

関連する問題