Метод toggle
Метод toggle класса Testable предназначен для переключения логических значений свойств компонента Livewire в тестовой среде. Он изменяет текущее значение свойства на противоположное: если было true, становится false, и наоборот. Метод принимает один обязательный параметр - имя свойства, которое нужно переключить.
Этот метод особенно полезен при тестировании интерфейсов с флагами состояния, например, при проверке переключателей, раскрывающихся панелей или видимости элементов. Он позволяет имитировать клик по элементу управления, который меняет состояние компонента.
Синтаксис
$component->toggle('propertyName')
Пример
Давайте протестируем переключение флага $isOpen в компоненте. Создадим компонент с кнопкой, которая меняет состояние флага:
<?php
namespace AppLivewire;
use LivewireComponent;
class Panel extends Component
{
public $isOpen = false;
public function togglePanel()
{
$this->isOpen = !$this->isOpen;
}
public function render()
{
return view('livewire.panel');
}
}
?>
<div>
<button wire:click="togglePanel">
Toggle
</button>
@if ($isOpen)
<p>Panel is open</p>
@endif
</div>
Теперь напишем тест с использованием метода toggle:
<?php
namespace TestsFeatureLivewire;
use TestsTestCase;
use LivewireLivewire;
use AppLivewirePanel;
class PanelTest extends TestCase
{
public function test_toggles_panel()
{
$component = Livewire::test(Panel::class);
// Проверяем начальное состояние
$component->assertSet('isOpen', false);
// Переключаем состояние
$component->toggle('isOpen');
$component->assertSet('isOpen', true);
// Переключаем обратно
$component->toggle('isOpen');
$component->assertSet('isOpen', false);
}
}
?>
Результат выполнения теста:
OK (1 test, 3 assertions)
Пример
Метод toggle также работает с числами, интерпретируя их как логические значения (0 и 1). Рассмотрим компонент с числовым флагом:
<?php
namespace AppLivewire;
use LivewireComponent;
class Switcher extends Component
{
public $status = 0;
public function switchStatus()
{
$this->status = $this->status ? 0 : 1;
}
public function render()
{
return view('livewire.switcher');
}
}
?>
<div>
<button wire:click="switchStatus">
Switch
</button>
<span>Status: {{ $status }}</span>
</div>
Тест с переключением числового статуса:
<?php
namespace TestsFeatureLivewire;
use TestsTestCase;
use LivewireLivewire;
use AppLivewireSwitcher;
class SwitcherTest extends TestCase
{
public function test_toggles_status()
{
$component = Livewire::test(Switcher::class);
$component->assertSet('status', 0);
$component->toggle('status');
$component->assertSet('status', 1);
$component->toggle('status');
$component->assertSet('status', 0);
}
}
?>
Результат выполнения кода:
OK (1 test, 3 assertions)