rammtw
@rammtw
Press CTRL+S to save project

Как правильно тестировать приложения, которые запрашивают сторонние API?

В проекте имеется класс SomethingApi.php, у которого есть методы для запросов на сторонний сервис (получение данных, редактирование и т.п.)

Этот класс используется в основном в очередях (Jobs), необходимо написать тесты для этих задач.

Мои решение:
1. Создать класс типа MockSomethingApi.php , методы которого будут возвращать статичный JSON, без реального вызова АПИ, далее инжектить этот класс в Jobs..
  • Вопрос задан
  • 196 просмотров
Пригласить эксперта
Ответы на вопрос 1
@seriogja
Добрый день!

Отдельный класс мока создавать не нужно. Ларавел из коробки идет с пакетом Mockery и оберткой над ним. Поэтому вы можете мокать объект частично (обычно сами вызовы api), при этом остальные методы продолжать работать без изменений.

Внутри теста:
$client = factory(Client::class)->create();
$mock = Mockery::mock(Client::class);
$this->app->instance($class, $mock);
$mock->shouldReceive('createFromApi')
            ->withAnyArgs()
            ->andReturn($client);


В данном примере мокается метод createFromApi класса Client (который, предположим создает экземпляр по данным вызова API). Теперь, указав andReturn($client), мы точно знаем, что вернется экземпляр класса Client. Все остальные методы не изменяются.

$this->app->instance устанавливает "подправленный" инстанс при резолве из DI. Таким образом, вы мокаете конкретные методы API, которые вызываются в рамках вашего теста.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы