Я разрабатываю пакет Laravel, который включает в себя контроллеры, которые я хочу проверить. Проблема в том, что исключение выбрасывается внутри одного из этих контроллеров, обработчик исключений Laravel захватывает его и выводит ответ HTTP 500. PHPUnit не является мудрее, и тесты просто не соответствуют утверждению 200 OK. Отсутствие трассировки стека в выводах PHPUnit как локально, так и на таких сервисах, как Travis CI, чрезвычайно затрудняет рабочий процесс.Как я могу переопределить обработчик исключений Laravel в тестах PHPUnit?
Я знаю, что я мог бы исключить исключение из такого места, как \App\Exceptions\Handler
, но поскольку это пакет, я не могу изменять эти файлы приложений (laravel/laravel
- это просто зависимость для тестирования, чтобы вставлять в необходимые компоненты для тестирования контроллеров).
я бы подумал set_exception_handler()
вызов ниже TestCase
будет работать, но удачливый это не имеет никакого воздействия:
public function createApplication()
{
$app = require __DIR__.'/../bootstrap/app.php';
$app->make(Illuminate\Contracts\Console\Kernel::class)->bootstrap();
set_exception_handler(function ($e) {
throw $e;
});
return $app;
}
Может кто-нибудь сказать мне, почему выше не работает?
Вы правы - все исключения, которые я хочу смотреть на может быть вызвано в единицах в другом месте. Я слишком много тестирую в единицах, потому что сложная задача написания сотен тестов делает меня ленивым ... – tjbp