Laravel 5.6 Mock Guzzle Response - PullRequest
       13

Laravel 5.6 Mock Guzzle Response

0 голосов
/ 13 марта 2019

Я пытаюсь смоделировать ответ «жрет» от определенного API.

Код моего контроллера выглядит так (с поправкой для краткости):

class SomeClass
{

    private $guzzle;

    public function __construct(\GuzzleHttp\Client $guzzle) {
        $this->guzzle = new $guzzle();
    }

    public function makeRequest(){

        $client = $this->guzzle;

        $url = 'http//somerurl';
        $options = [];

        $response = $client->request('POST', $url, $options);    

        return $response;
    }
}

И тест выглядит примерно так(снова отредактировано) ...

public function someTest(){

     $mock = $this->createMock(\GuzzleHttp\Client::class);

     $mock->method('request')->willReturn([
         'response' => 'somedata'
     ]);

     $someClass = new $SomeClass($mock);

     $response = $someClass->makeRequest();

     $body = $response->getBody();

     ...
}

В этот момент тест возвращает «Вызов функции-члена getBody on null»;

Как можно протестировать ответ getBody на вызов guzzle?

Заранее спасибо ...

1 Ответ

1 голос
/ 13 марта 2019

Один из подходов к тестированию с использованием Guzzle - настроить MockHandler

http://docs.guzzlephp.org/en/stable/testing.html

Таким образом, вместо того, чтобы издеваться над клиентом Guzzle, вы создаете его следующим образом:

public function someTest() {

    $mock = new MockHandler([
        new Response(200, [], 'The body!'),
        // Add more responses for each response you need
    ]);

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

    $someClass = new SomeClass($client);

    $response = $someClass->makeRequest();

    $body = $response->getBody();

    $this->assertSame('The body!', $body);
}
...