Метод assertCount
Метод assertCount класса Testable проверяет,
что количество элементов в указанном свойстве компонента,
которое является массивом или объектом, реализующим интерфейс
Countable, соответствует ожидаемому числу.
Метод принимает два параметра: ожидаемое количество и имя свойства.
Если количество элементов не совпадает, тест будет провален.
Синтаксис
<?php
Livewire::test(Component::class)
->assertCount(int $expected, string $property);
?>
Пример
Давайте проверим, что массив $items содержит ровно 3 элемента:
<?php
namespace AppLivewire;
use LivewireComponent;
class ItemList extends Component
{
public $items = ['a', 'b', 'c'];
public function render()
{
return view('livewire.item-list');
}
}
?>
<div>
@foreach ($items as $item)
<span>{{ $item }}</span>
@endforeach
</div>
<?php
namespace TestsFeatureLivewire;
use AppLivewireItemList;
use LivewireLivewire;
use TestsTestCase;
class ItemListTest extends TestCase
{
public function test_items_count()
{
Livewire::test(ItemList::class)
->assertCount(3, 'items');
}
}
?>
Результат выполнения кода:
OK (1 test, 1 assertion)
Пример
Давайте проверим, что коллекция $users после добавления элемента содержит 4 записи:
<?php
namespace AppLivewire;
use LivewireComponent;
use IlluminateSupportCollection;
class UserList extends Component
{
public $users;
public function mount()
{
$this->users = collect(['user1', 'user2', 'user3']);
}
public function addUser()
{
$this->users->push('user4');
}
public function render()
{
return view('livewire.user-list');
}
}
?>
<div>
<button wire:click="addUser">Add user</button>
@foreach ($users as $user)
<span>{{ $user }}</span>
@endforeach
</div>
<?php
namespace TestsFeatureLivewire;
use AppLivewireUserList;
use LivewireLivewire;
use TestsTestCase;
class UserListTest extends TestCase
{
public function test_users_count_after_add()
{
Livewire::test(UserList::class)
->call('addUser')
->assertCount(4, 'users');
}
}
?>
Результат выполнения кода:
OK (1 test, 1 assertion)
Пример
Давайте проверим, что массив $numbers содержит 5 элементов после фильтрации:
<?php
namespace AppLivewire;
use LivewireComponent;
class NumberList extends Component
{
public $numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
public function filterEven()
{
$this->numbers = array_filter(
$this->numbers,
fn($n) => $n % 2 === 0
);
}
public function render()
{
return view('livewire.number-list');
}
}
?>
<div>
<button wire:click="filterEven">Filter even</button>
@foreach ($numbers as $num)
<span>{{ $num }}</span>
@endforeach
</div>
<?php
namespace TestsFeatureLivewire;
use AppLivewireNumberList;
use LivewireLivewire;
use TestsTestCase;
class NumberListTest extends TestCase
{
public function test_filtered_numbers_count()
{
Livewire::test(NumberList::class)
->call('filterEven')
->assertCount(5, 'numbers');
}
}
?>
Результат выполнения кода:
OK (1 test, 1 assertion)