Добрый день.
Подскажите, пожалуйста.
Вопрос возник на конкретном примере для Symfony, но вроде бы к фреймворку не привязан.
В тесте для контроллера хочу протестировать ответ для ситуации, когда один из внутренних сервисов, используемых контроллером выдает Exception. Т.е., например, сервис делает запрос к внешнему API, но возникла ситуация, когда данный API недоступен.
В тесте делаю так:
$serviceStub = $this->createMock(ServiceInterface::class);
// имитируем, что someMethod не имеет доступа к внешнему API
$serviceStub->method('someMethod')->willThrowException(
new MyException(JsonResponse::HTTP_SERVICE_UNAVAILABLE, 'External API is not available.')
);
// подменяем сервис в контейнере
$this->client->getContainer()->set(self::SERVICE_ID, $serviceStub);
// далее запрос к контроллеру
$this->client->request(Request::METHOD_GET, self::CONTROLLER_ENDPOINT_URL);
// и далее asserts для response
Такой тест проходится, меня смущает то, что вывод в консоли "не чистый".
Результат тестов зеленый, но из строки с willThrowException сообщения попадают в консоль.
Нормально ли это? Или не правильно делаю?
Пробовал на простом примере (без вложенных сервисов) - с отдельным классом/методом.
Там можно убрать Exception сообщения из консоли
с помощью добавление в тест
$this->expectException(MyException::class);