Метод call класса Testable
Метод call класса Testable предназначен для вызова публичных методов компонента Livewire в тестовой среде. Он принимает имя метода в качестве первого аргумента и параметры метода в качестве последующих аргументов. После вызова метода тестовый экземпляр компонента обновляется, что позволяет проверять изменения состояния.
Синтаксис
$component->call('methodName', $param1, $param2);
Пример простого вызова метода
Давайте создадим компонент с методом inc, который увеличивает счетчик, и вызовем его в тесте:
<?php
namespace AppLivewire;
use LivewireComponent;
class Counter extends Component
{
public $num = 0;
public function inc()
{
$this->num++;
}
public function render()
{
return view('livewire.counter');
}
}
?>
<div>
<span>{{ $num }}</span>
</div>
<?php
namespace TestsUnit;
use TestsTestCase;
use LivewireLivewire;
use AppLivewireCounter;
class CounterTest extends TestCase
{
public function test_increment()
{
$component = Livewire::test(Counter::class);
$component->call('inc');
$component->assertSet('num', 1);
}
}
?>
Результат выполнения кода:
OK (1 test)
Пример вызова метода с параметрами
Давайте передадим в метод параметр, определяющий шаг увеличения счетчика:
<?php
namespace AppLivewire;
use LivewireComponent;
class Counter extends Component
{
public $num = 0;
public function inc($step)
{
$this->num += $step;
}
public function render()
{
return view('livewire.counter');
}
}
?>
<div>
<span>{{ $num }}</span>
</div>
<?php
namespace TestsUnit;
use TestsTestCase;
use LivewireLivewire;
use AppLivewireCounter;
class CounterTest extends TestCase
{
public function test_increment_with_step()
{
$component = Livewire::test(Counter::class);
$component->call('inc', 5);
$component->assertSet('num', 5);
}
}
?>
Результат выполнения кода:
OK (1 test)
Пример вызова метода с несколькими параметрами
Давайте вызовем метод, который принимает несколько аргументов:
<?php
namespace AppLivewire;
use LivewireComponent;
class Calculator extends Component
{
public $result = 0;
public function add($a, $b)
{
$this->result = $a + $b;
}
public function render()
{
return view('livewire.calculator');
}
}
?>
<div>
<span>{{ $result }}</span>
</div>
<?php
namespace TestsUnit;
use TestsTestCase;
use LivewireLivewire;
use AppLivewireCalculator;
class CalculatorTest extends TestCase
{
public function test_add_method()
{
$component = Livewire::test(Calculator::class);
$component->call('add', 10, 20);
$component->assertSet('result', 30);
}
}
?>
Результат выполнения кода:
OK (1 test)