Метод dispatch
Метод dispatch класса Testable эмулирует отправку события из компонента Livewire во время тестирования. Он принимает имя события и массив параметров. Метод используется для проверки того, что компонент правильно реагирует на события, отправленные через dispatch или emit. После вызова метода можно использовать утверждения для проверки состояния компонента.
Синтаксис
$component->dispatch('eventName', $params);
Параметры
Метод принимает следующие параметры:
$event- имя события, которое нужно отправить;$params- массив параметров, передаваемых с событием.
Пример
Давайте создадим компонент, который отправляет событие при изменении счетчика:
<?php
namespace AppLivewire;
use LivewireComponent;
class Counter extends Component
{
public $num = 0;
public function increment()
{
$this->num++;
$this->dispatch('counterUpdated', $this->num);
}
public function render()
{
return view('livewire.counter');
}
}
?>
<div>
<button wire:click="increment">+</button>
<span>{{ $num }}</span>
</div>
Теперь напишем тест, который проверяет отправку события:
<?php
namespace TestsFeatureLivewire;
use AppLivewireCounter;
use LivewireLivewire;
use TestsTestCase;
class CounterTest extends TestCase
{
public function test_increment_dispatches_event()
{
$component = Livewire::test(Counter::class);
$component->dispatch('counterUpdated', 5);
$component->assertSet('num', 5);
}
}
?>
Пример
Давайте проверим, что компонент правильно обрабатывает событие от другого компонента:
<?php
namespace AppLivewire;
use LivewireComponent;
class Notification extends Component
{
public $message = '';
protected $listeners = ['showNotification' => 'handleNotification'];
public function handleNotification($text)
{
$this->message = $text;
}
public function render()
{
return view('livewire.notification');
}
}
?>
<div>
<p>{{ $message }}</p>
</div>
Тест для проверки обработки события:
<?php
namespace TestsFeatureLivewire;
use AppLivewireNotification;
use LivewireLivewire;
use TestsTestCase;
class NotificationTest extends TestCase
{
public function test_notification_handles_event()
{
$component = Livewire::test(Notification::class);
$component->dispatch('showNotification', ['Hello World']);
$component->assertSet('message', 'Hello World');
}
}
?>
Пример
Давайте проверим отправку события с несколькими параметрами:
<?php
namespace AppLivewire;
use LivewireComponent;
class UserManager extends Component
{
public $userName = '';
public $userAge = 0;
public function saveUser($name, $age)
{
$this->userName = $name;
$this->userAge = $age;
$this->dispatch('userSaved', [$name, $age]);
}
public function render()
{
return view('livewire.user-manager');
}
}
?>
<div>
<input wire:model="userName" type="text">
<input wire:model="userAge" type="number">
<button wire:click="saveUser(userName, userAge)">Save</button>
</div>
Тест для проверки отправки события с несколькими параметрами:
<?php
namespace TestsFeatureLivewire;
use AppLivewireUserManager;
use LivewireLivewire;
use TestsTestCase;
class UserManagerTest extends TestCase
{
public function test_user_saved_event_dispatched()
{
$component = Livewire::test(UserManager::class);
$component->dispatch('userSaved', ['John', 30]);
$component->assertSet('userName', 'John');
$component->assertSet('userAge', 30);
}
}
?>
Смотрите также
-
метод
assertDispatched,
который проверяет отправку события -
метод
assertNotDispatched,
который проверяет отсутствие отправки события -
метод
set,
который устанавливает значение свойства компонента -
метод
call,
который вызывает метод компонента из теста