Я запускаю интеграционные тесты с PHPUnit (6.5.8, обновлен до 7.1.5, без разницы) на API, созданном с Symfony (Flex 1.0).
У меня есть несколько контроллеров, которые выдают исключения одним способомили другой, например, из соображений безопасности (например, с использованием аннотации @IsGranted
).
Эти исключения преобразуются в JSON через ExceptionController из FOSRestBundle .Это отлично работает, также в тестах .
Я тестирую те исключения, которые конвертируются, проверяя коды состояния и т. Д., Пример:
public function testSecurity() {
$this->request('GET', '/foo');
$this->assertStatusCode(403);
}
Теперь этоtest не завершается неудачей и все работает как надо, но PHPUnit по-прежнему отображает следующие типы ошибок:
[error] Uncaught PHP Exception Symfony\Component\HttpKernel\Exception\AccessDeniedHttpException: "Access Denied by controller annotation @IsGranted("ROLE_ADMIN")" at /var/www/symfony/vendor/symfony/security/Http/Firewall/ExceptionListener.php line 117
Хотя это не влияет на сами тесты, так как онивсе еще успешны, это все еще довольно беспокоит, поскольку эти сообщения нарушают вывод теста, затрудняя выявление фактических ошибок.Ergo, я хотел бы отключить эти сообщения об ошибках.ИМО, эти исключения не должны быть «необработанными», так как они, очевидно, обрабатываются каким-то обработчиком, поскольку они преобразованы в ответ JSON.
Что я пробовал:
- отключение регистрации ошибок, как упомянуто в этой проблеме , описывающей в точности поведение, которое я наблюдаю
- , утверждающее выброшенное Исключение в PHPUnit, но это не удается, так как Исключение фактически не являетсябросил в тесте
- различные настройки PHPUnit (
error_reporting
, SHELL_VERBOSITY
, APP_DEBUG
и т. д.)
Что я заметил:
Этопроисходит только тогда, когда выдается исключение (например, из-за использования @IsGranted
).Если вместо этого я верну исключение, PHPUnit не выдаст ошибку.