Метод assertDispatched
Метод assertDispatched класса Testable используется в тестах Livewire для проверки того, что компонент отправил определенное событие. Этот метод позволяет убедиться, что при выполнении определенных действий в компоненте было сгенерировано событие с ожидаемыми параметрами. Метод принимает имя события и опционально замыкание для проверки переданных данных.
Синтаксис
<?php
$component->assertDispatched('event-name');
$component->assertDispatached('event-name', function ($data) {
return $data['key'] === 'value';
});
?>
Пример
Создадим компонент для отправки события после увеличения счетчика:
<?php
namespace App\Livewire;
use Livewire\Component;
use Livewire\Attributes\On;
class Counter extends Component
{
public $count = 0;
public function increment()
{
$this->count++;
$this->dispatch('counter-updated', count: $this->count);
}
public function render()
{
return view('livewire.counter');
}
}
?>
<div>
<button wire:click="increment">Increment</button>
<span>{{ $count }}</span>
</div>
Тест, проверяющий отправку события:
<?php
namespace Tests\Unit;
use Tests\TestCase;
use App\Livewire\Counter;
use Livewire\Livewire;
class CounterTest extends TestCase
{
public function test_increment_dispatches_event()
{
$component = Livewire::test(Counter::class);
$component->call('increment');
$component->assertDispatched('counter-updated');
}
}
?>
Результат выполнения теста:
OK (1 test, 1 assertion)
Пример
Проверим данные, переданные с событием, используя замыкание:
<?php
namespace Tests\Unit;
use Tests\TestCase;
use App\Livewire\Counter;
use Livewire\Livewire;
class CounterTest extends TestCase
{
public function test_increment_dispatches_event_with_correct_data()
{
$component = Livewire::test(Counter::class);
$component->call('increment');
$component->assertDispatched('counter-updated', function ($data) {
return $data['count'] === 1;
});
}
}
?>
Результат выполнения теста:
OK (1 test, 2 assertions)
Пример
Проверим, что событие было отправлено ровно один раз:
<?php
namespace Tests\Unit;
use Tests\TestCase;
use App\Livewire\Counter;
use Livewire\Livewire;
class CounterTest extends TestCase
{
public function test_increment_dispatches_event_once()
{
$component = Livewire::test(Counter::class);
$component->call('increment');
$component->assertDispatched('counter-updated');
// Проверяем, что событие было отправлено только один раз
$component->assertDispatched('counter-updated', function ($data) {
return true;
});
}
}
?>
Результат выполнения теста:
OK (1 test, 2 assertions)
Смотрите также
-
метод
assertNotDispatched,
который проверяет, что событие не было отправлено -
метод
assertSet,
который проверяет значение свойства компонента -
метод
call,
который вызывает метод компонента -
метод
dispatch,
который отправляет событие компоненту