Как вызвать метод RetryMiddleware retryDecider в PHP модульных тестах Guzzle - PullRequest
0 голосов
/ 14 февраля 2020

У меня есть класс, который расширяет GuzzleClient. В его конструкторе я создаю экземпляр и передаю стек обработчика родительскому классу, который включает CurlHandler и некоторое промежуточное ПО для повторных попыток, чтобы решить, когда повторять запросы.

public class MyClient extends GuzzleClient {
  public function __construct(...)
  {
    $config = ...

    $handlerStack = HandlerStack::create(new CurlHandler);
    $retryMiddleware = Middleware::retry($this->retryDecider(), $this->retryDelay());
    $handlerStack->push($retryMiddleware);
    $config['handler'] = $handlerStack;

    parent::__construct($config)
  }
  ...
}

В моих модульных тестах я хочу протестировать мой метод retryDecider путем насмешки ответа 504 для запуска retryDecider, но у меня возникли проблемы с этим:

public function testRetryDecider()
{
  $client = new MyClient(...);

  $mock = new MockHandler([
    new Response(504),
    new Response(200)
  ]);

  // new mock handlerstack
  $mockStack = HandlerStack::create($mock);

  $handler = $client->getConfig('handler');

  // QUESTION: how do I add my Mock Handler to my client so that it receives a 504 response, and triggers my retryDecider method?
...