Как проверить контроллер, который общается с микросервисом? - PullRequest
0 голосов
/ 02 мая 2020

У меня следующий сценарий: мне нужно написать несколько юнит-тестов для контроллеров. В контроллерах у меня есть все типы действий CRUD. Проблема в том, что в действиях post / patch / delete мой API взаимодействует с веб-сервисом, где я передаю некоторые данные. Связь осуществляется с жадностью.

Вопрос: Как избежать связи, когда я вызываю маршрут? Есть ли другая возможность проверить контроллер зала?

Ответы [ 2 ]

1 голос
/ 02 мая 2020

Я предполагаю, что ваш микросервис - это класс, который зарегистрирован в служебном контейнере Laravel. Насколько я знаю, вы не можете макетировать классы вне контейнера в Laravel.

Так что, если вы этого не делаете, зарегистрируйте сервис в контейнере в классе AppServiceProvider. И получите микросервис из контейнера в контроллере. Подробнее см. Здесь .

. В своем модульном тесте вы можете создать макет объекта вашего микросервиса в соответствии с вашими потребностями и вставить его в контейнер (заменив реальный). например

$this->instance(MyMicroService::class, Mockery::mock(MyMicroService::class, function ($mock) {
    // here you tell the mock object which method will be called and what to return and how many times it will be called. it's totally customizable.
    $mock->shouldReceive('contactRemoteServer')->once()->andReturnTrue();
}));

и это проще, если вы используете метод mock в своем классе тестового набора, но он делает то же самое:

$this->mock(MyMicroService::class, function ($mock) {
    $mock->shouldReceive('contactRemoteServer')->once()->andReturnTrue();
});

см. Документы для получения дополнительной информации Примеры.

NB: Если вы не знаете, фиктивный класс - это класс, созданный специально для теста, поэтому он не влияет на результаты и должен быть управляемым в соответствии с тестом. needs.

Например, если вы хотите, чтобы ваш микросервис выдавал исключение, и вы хотите проверить ответ контроллера, для этого вам нужно будет создать фиктивный класс для каждого модульного теста.

0 голосов
/ 02 мая 2020

Создайте пример класса с той же функциональностью, но у меня есть один вопрос, если вы создаете модульные тесты, и вы не хотите, чтобы жадность работала, что вы будете тестировать.

Пожалуйста, внимательно прочитайте документацию вы получите опцию.

В моем предложении вы можете использовать насмешку.

...