Метод actingAs
Метод actingAs применяется к экземпляру тестового клиента
и позволяет указать пользователя, от имени которого будут выполняться
запросы. Первым параметром передаётся модель пользователя,
вторым - необязательный параметр с именем guard.
Метод возвращает тот же экземпляр клиента для цепочки вызовов.
Синтаксис
<?php
$this->actingAs($user, $guard);
?>
Пример
Давайте протестируем доступ к защищённому маршруту для аутентифицированного пользователя:
<?php
namespace Tests\Feature;
use Tests\TestCase;
use App\Models\User;
use Illuminate\Foundation\Testing\RefreshDatabase;
class DashboardTest extends TestCase
{
use RefreshDatabase;
public function test_authenticated_user_can_access_dashboard()
{
$user = User::factory()->create();
$res = $this
->actingAs($user)
->get('/dashboard');
$res->assertOk();
}
}
?>
Пример
Давайте проверим, что неаутентифицированный пользователь перенаправляется на страницу входа:
<?php
namespace Tests\Feature;
use Tests\TestCase;
use Illuminate\Foundation\Testing\RefreshDatabase;
class DashboardTest extends TestCase
{
use RefreshDatabase;
public function test_guest_cannot_access_dashboard()
{
$res = $this->get('/dashboard');
$res->assertRedirect('/login');
}
}
?>
Пример
Давайте протестируем доступ к маршруту администратора с использованием конкретного guard:
<?php
namespace Tests\Feature;
use Tests\TestCase;
use App\Models\Admin;
use Illuminate\Foundation\Testing\RefreshDatabase;
class AdminTest extends TestCase
{
use RefreshDatabase;
public function test_admin_can_access_admin_panel()
{
$admin = Admin::factory()->create();
$res = $this
->actingAs($admin, 'admin')
->get('/admin/dashboard');
$res->assertOk();
}
}
?>
Пример
Давайте проверим, что метод actingAs сохраняет сессию между запросами в одном тесте:
<?php
namespace Tests\Feature;
use Tests\TestCase;
use App\Models\User;
use Illuminate\Foundation\Testing\RefreshDatabase;
class ProfileTest extends TestCase
{
use RefreshDatabase;
public function test_user_can_view_and_update_profile()
{
$user = User::factory()->create([
'name' => 'John Doe'
]);
$this->actingAs($user);
$res1 = $this->get('/profile');
$res1->assertSee('John Doe');
$res2 = $this->put('/profile', [
'name' => 'Jane Doe'
]);
$res2->assertRedirect('/profile');
$res3 = $this->get('/profile');
$res3->assertSee('Jane Doe');
}
}
?>
Пример
Давайте проверим, что метод actingAs работает с фабрикой моделей для создания пользователей:
<?php
namespace Tests\Feature;
use Tests\TestCase;
use App\Models\User;
use App\Models\Post;
use Illuminate\Foundation\Testing\RefreshDatabase;
class PostTest extends TestCase
{
use RefreshDatabase;
public function test_user_can_create_post()
{
$user = User::factory()->create();
$res = $this
->actingAs($user)
->post('/posts', [
'title' => 'Test Post',
'content' => 'This is a test post content.'
]);
$res->assertCreated();
$this->assertDatabaseHas('posts', [
'title' => 'Test Post',
'user_id' => $user->id
]);
}
}
?>
Смотрите также
-
класс
TestCase,
который предоставляет методы для тестирования -
метод
get,
который выполняет GET-запрос в тестах -
метод
post,
который выполняет POST-запрос в тестах -
метод
assertAuthenticated,
который проверяет аутентификацию пользователя