Метод actingAs
Метод actingAs класса Livewire используется в тестах для установки текущего аутентифицированного пользователя. Он принимает экземпляр модели пользователя или реализацию интерфейса Authenticatable. Метод возвращает экземпляр тестируемого компонента с примененной авторизацией.
Синтаксис
<?php
$user = User::find(1);
$component = Livewire::actingAs($user)->test(ComponentClass::class);
?>
Пример
Создадим компонент Profile, который отображает имя текущего пользователя:
<?php
namespace AppLivewire;
use LivewireComponent;
use IlluminateSupportFacadesAuth;
class Profile extends Component
{
public $userName;
public function mount()
{
$this->userName = Auth::user()->name;
}
public function render()
{
return view('livewire.profile');
}
}
?>
<div>
<p>Welcome, {{ $userName }}</p>
</div>
Пример
Напишем тест для компонента Profile с использованием метода actingAs:
<?php
namespace TestsFeatureLivewire;
use LivewireLivewire;
use TestsTestCase;
use AppModelsUser;
class ProfileTest extends TestCase
{
public function test_authenticated_user_can_see_profile()
{
$user = User::factory()->create([
'name' => 'John Doe',
]);
Livewire::actingAs($user)
->test(Profile::class)
->assertSee('Welcome, John Doe');
}
public function test_guest_user_cannot_see_profile()
{
Livewire::test(Profile::class)
->assertStatus(403)
->assertSee('Unauthorized');
}
}
?>
Результат выполнения первого теста:
OK (1 tests, 1 assertions)
Пример
При работе с несколькими тестами метод actingAs позволяет быстро переключаться между пользователями:
<?php
namespace TestsFeatureLivewire;
use LivewireLivewire;
use TestsTestCase;
use AppModelsUser;
use AppLivewireAdminProfile;
class AdminProfileTest extends TestCase
{
public function test_admin_can_see_admin_panel()
{
$admin = User::factory()->create([
'name' => 'Admin',
'is_admin' => true,
]);
Livewire::actingAs($admin)
->test(AdminProfile::class)
->assertSee('Admin Panel')
->assertSee('Manage users');
}
public function test_user_cannot_see_admin_panel()
{
$user = User::factory()->create([
'name' => 'User',
'is_admin' => false,
]);
Livewire::actingAs($user)
->test(AdminProfile::class)
->assertSee('Access Denied')
->assertDontSee('Manage users');
}
}
?>
Результат выполнения кода:
OK (2 tests, 4 assertions)