Исключения в пакете Laravel 5, не использующие метод рендеринга Хандера

0

Я работаю над пакетом и использую пакет Orchestra/Testbench для своих модульных тестов.

Я пытаюсь написать тест PHPUnit, который проверяет правильность ответа при возникновении исключения. В моем репозитории я бросаю следующее исключение:

use Acme\Common\Exceptions\ValidationException;
...
throw new ValidationException($validator);

Я зарегистрировал класс обработчика в поставщике услуг пакетов:

$this->app->singleton('Illuminate\Contracts\Debug\ExceptionHandler', 'Acme\Common\Exceptions\Handler');

Однако метод render() в классе Handler не запускается. Здесь метод render():

public function render($request, Exception $e)
{
    if ($e instanceof \Acme\Common\Exceptions\ValidationException) {

        $message = implode(' ', array_flatten($exception->getMessages()->toArray()));

        $response = array('errorCode' => $exception->getCode());

        return \Response::make($response, 400);
    }

    return parent::render($request, $e);
}

Вместо этого я просто получаю общий метод исключения:

Acme\Common\Exceptions\ValidationException: {"key":["The key field is required."]}

Я даже поставил dd() в начале метода render(), но ничего. Я пропустил какую-то настройку с оркестром Testbench?

Теги:
laravel-5
phpunit

2 ответа

3
Лучший ответ

Вы случайно отвергаете конструктор в этом классе? У меня была такая же проблема (пытаясь поймать также ValidationException), и я не понимал, что испортил конструктор. Вероятно, происходит то, что что-то вызывает исключение, которое не попадает (поскольку это происходит в вашем обработчике исключений!). В моем случае я переопределял конструктор, который означал, что родительский класс не получал введенный класс журнала, что вызывало исключение исключения и прекращение действий до того, как был запущен метод рендеринга.

1

Вы вводите класс Exception через переменную " $e ", но в вашем методе вы вызываете переменную " $exception ".

Поскольку $exception -variable не задано, вы должны использовать $e -variable.

public function render($request, Exception $e)
{
    if ($e instanceof \Acme\Common\Exceptions\ValidationException) {

        $message = implode(' ', array_flatten($e->getMessages()->toArray()));

        $response = array('errorCode' => $e->getCode());

        return \Response::make($response, 400);

    }

    return parent::render($request, $e);
}

Ещё вопросы

Сообщество Overcoder
Наверх
Меню