РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
1192 of 1392 menu

Метод withoutExceptionHandling

Метод withoutExceptionHandling применяется к экземпляру класса TestCase в тестах Laravel. Он отключает стандартный обработчик исключений, который обычно преобразует ошибки в HTTP-ответы с соответствующими статусами. Это позволяет тестировщику видеть полную информацию об исключении, включая стек вызовов, что значительно упрощает процесс отладки и выявления проблем в коде. Метод не принимает никаких параметров и вызывается непосредственно перед выполнением тестируемого запроса.

Синтаксис

<?php $this->withoutExceptionHandling(); ?>

Метод вызывается без параметров и должен быть использован перед выполнением HTTP-запроса в тесте. После вызова этого метода все исключения, возникающие в коде, будут проброшены напрямую, вместо того чтобы быть перехваченными и преобразованными в ответы с кодами ошибок. Это особенно полезно при отладке тестов, когда стандартные сообщения об ошибках не дают достаточной информации.

Пример

Рассмотрим тест, который проверяет создание статьи. Без использования withoutExceptionHandling исключение будет перехвачено и преобразовано в HTTP-ответ:

<?php namespace Tests\Feature; use Tests\TestCase; use App\Models\Article; use Illuminate\Foundation\Testing\RefreshDatabase; class ArticleTest extends TestCase { use RefreshDatabase; public function test_article_creation() { $data = [ 'title' => 'Test Article', 'content' => 'Test content', ]; $res = $this->post('/api/articles', $data); $res->assertStatus(201); } } ?>

Результат выполнения кода при возникновении ошибки:

"Illuminate\Validation\ValidationException: The given data was invalid."

Пример

Теперь используем withoutExceptionHandling, чтобы увидеть полную информацию об ошибке:

<?php namespace Tests\Feature; use Tests\TestCase; use App\Models\Article; use Illuminate\Foundation\Testing\RefreshDatabase; class ArticleTest extends TestCase { use RefreshDatabase; public function test_article_creation_without_exception_handling() { $this->withoutExceptionHandling(); $data = [ 'title' => 'Test Article', 'content' => 'Test content', ]; $res = $this->post('/api/articles', $data); $res->assertStatus(201); } } ?>

Результат выполнения кода при возникновении ошибки:

"Illuminate\Validation\ValidationException: The given data was invalid. Failed asserting that 302 is identical to 201."

Пример

Метод withoutExceptionHandling часто используется в связке с методом followingRedirects для отладки редиректов:

<?php namespace Tests\Feature; use Tests\TestCase; use App\Models\User; use Illuminate\Foundation\Testing\RefreshDatabase; class UserTest extends TestCase { use RefreshDatabase; public function test_user_registration_without_exception_handling() { $this->withoutExceptionHandling(); $user = [ 'name' => 'John Doe', 'email' => 'john@example.com', 'password' => 'password123', ]; $res = $this->post('/register', $user); $res->assertRedirect('/dashboard'); } } ?>

Результат выполнения кода при возникновении ошибки:

"Symfony\Component\HttpKernel\Exception\HttpException: The user is not authenticated."

Смотрите также

  • класс TestCase,
    который является базовым классом для всех тестов
  • метод withoutMiddleware,
    который отключает middleware для тестирования
  • метод followingRedirects,
    который выполняет автоматический переход по редиректам
  • класс RefreshDatabase,
    который обновляет базу данных перед каждым тестом
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить