Метод assertRedirectToRoute
Метод assertRedirectToRoute применяется к объекту ответа
в тестах Laravel. Он проверяет, что ответ является
редиректом (статус 302, 301 или другой) и что URL редиректа
совпадает с URL указанного именованного маршрута. Первым
параметром передаётся имя маршрута, вторым - массив параметров
для маршрута (необязательно).
Синтаксис
<?php
$this->assertRedirectToRoute($routeName, $parameters = []);
?>
Пример
Давайте протестируем контроллер, который после успешного
создания статьи перенаправляет на маршрут с именем
'articles.index':
<?php
namespace Tests\Feature;
use Tests\TestCase;
use App\Models\Article;
class ArticleControllerTest extends TestCase
{
public function test_store_redirects_to_index()
{
$data = [
'title' => 'Test Article',
'content' => 'This is test content',
];
$res = $this->post('/articles', $data);
$res->assertRedirectToRoute('articles.index');
}
}
?>
Пример
Проверим редирект на маршрут с параметрами. Например,
после обновления статьи перенаправление происходит
на маршрут 'articles.show' с идентификатором статьи:
<?php
namespace Tests\Feature;
use Tests\TestCase;
use App\Models\Article;
class ArticleControllerTest extends TestCase
{
public function test_update_redirects_to_show()
{
$article = Article::create([
'title' => 'Old Title',
'content' => 'Old Content',
]);
$data = [
'title' => 'New Title',
'content' => 'New Content',
];
$res = $this->put("/articles/{$article->id}", $data);
$res->assertRedirectToRoute('articles.show', [
'article' => $article->id,
]);
}
}
?>
Результат выполнения кода:
"Test passed: response is redirect to route 'articles.show' with id 1"
Пример
Если необходимо проверить редирект на маршрут с несколькими параметрами, передайте их в виде ассоциативного массива:
<?php
namespace Tests\Feature;
use Tests\TestCase;
use App\Models\User;
use App\Models\Category;
class UserControllerTest extends TestCase
{
public function test_user_redirects_to_category_posts()
{
$user = User::create([
'name' => 'John Doe',
'email' => 'john@example.com',
]);
$category = Category::create([
'name' => 'Technology',
]);
$res = $this->actingAs($user)
->get("/user/{$user->id}/category/{$category->id}");
$res->assertRedirectToRoute('user.category.posts', [
'user' => $user->id,
'category' => $category->id,
]);
}
}
?>
Смотрите также
-
метод
assertRedirect,
который проверяет редирект на произвольный URL -
метод
assertStatus,
который проверяет статус-код ответа -
метод
get,
который выполняет GET-запрос в тестах -
метод
post,
который выполняет POST-запрос в тестах