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

Метод followingRedirects

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

Синтаксис

<?php $this->followingRedirects()->get($uri, $headers); $this->followingRedirects()->post($uri, $data, $headers); $this->followingRedirects()->put($uri, $data, $headers); $this->followingRedirects()->delete($uri, $headers); ?>

Пример

Давайте протестируем маршрут, который выполняет редирект после создания записи:

<?php namespace Tests\Feature; use Tests\TestCase; use App\Models\Article; use Illuminate\Foundation\Testing\RefreshDatabase; class ArticleControllerTest extends TestCase { use RefreshDatabase; public function test_store_redirects_to_article_show() { $res = $this->followingRedirects() ->post('/articles', [ 'title' => 'article 1', 'content' => 'content 1' ]); $res->assertStatus(200) ->assertViewIs('articles.show') ->assertSee('article 1'); } } ?>

Результат выполнения теста:

"OK (1 test, 3 assertions)"

Пример

Проверим цепочку из нескольких редиректов, когда промежуточные маршруты также выполняют перенаправление:

<?php namespace Tests\Feature; use Tests\TestCase; use Illuminate\Foundation\Testing\RefreshDatabase; class RedirectChainTest extends TestCase { use RefreshDatabase; public function test_complex_redirect_chain() { $res = $this->followingRedirects() ->get('/old-articles'); $res->assertStatus(200) ->assertViewIs('articles.index') ->assertSee('All articles'); $res = $this->followingRedirects() ->get('/legacy/post/5'); $res->assertStatus(200) ->assertSee('article 5'); } } ?>

Результат выполнения теста:

"OK (2 tests, 6 assertions)"

Пример

Сравним поведение с методом без followingRedirects и с ним для тестирования процесса аутентификации:

<?php namespace Tests\Feature; use Tests\TestCase; use App\Models\User; use Illuminate\Foundation\Testing\RefreshDatabase; class AuthTest extends TestCase { use RefreshDatabase; public function test_login_without_following_redirects() { $res = $this->post('/login', [ 'email' => 'user@example.com', 'password' => 'password' ]); $res->assertStatus(302) ->assertRedirect('/dashboard'); } public function test_login_with_following_redirects() { $res = $this->followingRedirects() ->post('/login', [ 'email' => 'user@example.com', 'password' => 'password' ]); $res->assertStatus(200) ->assertSee('Welcome to dashboard'); } } ?>

Результат выполнения теста:

"OK (2 tests, 4 assertions)"

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

  • метод get,
    который выполняет GET-запрос в тестах
  • метод post,
    который выполняет POST-запрос в тестах
  • метод assertRedirect,
    который проверяет, что ответ является редиректом
  • метод assertStatus,
    который проверяет код статуса HTTP-ответа
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить