---
title: "Testovanie — Likes for Laravel | Roundly"
description: "Likes::fake() zaznamená každý páčik, odobratie aj reakciu a záznamy pritom naozaj zapíše — plus pomocníky pre aktéra, Pest matchery a factory."
url: https://roundly-consulting.com/sk/open-source/navody/likes-for-laravel/testovanie
language: sk
---

[Všetky balíky](https://roundly-consulting.com/sk/open-source.md)

[Likes for Laravel](https://roundly-consulting.com/sk/open-source/navody/likes-for-laravel.md)

# Testovanie

Likes::fake() nahradí manažér — pre fasádu aj pre injektovaný LikeManager — zaznamenávajúcim fake a vráti ho. Fake každú operáciu naďalej vykoná, takže has(), for() aj vaše vlastné dopyty vidia skutočné záznamy. Zápis, ktorý balík odmietne — neznámy typ reakcie, žiadny vyhodnotiteľný aktér —, vyhodí výnimku a nezaznamená sa, takže asercia nikdy neprejde pri zápise, ktorý sa nestal:

```php
use RoundlyConsulting\Likes\Facades\Likes;

$fake = Likes::fake();

$user->like($post);
Likes::actor($user)->unlike($comment);
Likes::actor($user)->as('love')->react($photo);

$fake->assertLiked($post);                    // optionally a type: an untyped like matches the default type
$fake->assertLikedBy($user, $post);
$fake->assertNotLiked($other);
$fake->assertLikedCount(1);
$fake->assertLikedTimes($post, 1);
$fake->assertUnliked($comment, by: $user);
$fake->assertReacted($photo, 'love');
```

## Asercie fake

| Asercia | Prejde, keď |
| --- | --- |
| `assertLiked($model, ?$type)` | Pre model sa zaznamenal páčik (voliteľne daného typu). |
| `assertLikedBy($actor, $model, ?$type)` | Daný aktér dal modelu páčik (voliteľne daného typu). |
| `assertNotLiked($model)` | Pre model sa nezaznamenal žiadny páčik. |
| `assertNothingLiked()` | Nezaznamenal sa vôbec žiadny páčik. |
| `assertLikedCount($count)` | Zaznamenal sa presne daný počet páčikov. |
| `assertLikedTimes($model, $count)` | Model dostal páčik presne toľkokrát. |
| `assertUnliked($model, ?$type, ?$by)` | Pre model sa zaznamenalo odobratie páčika (voliteľne daného typu a od daného aktéra). |
| `assertNothingUnliked()` | Nezaznamenalo sa vôbec žiadne odobratie. |
| `assertReacted($model, ?$type, ?$by)` | Pre model sa zaznamenalo react() (voliteľne daného typu a od daného aktéra). |
| `assertNothingReacted()` | Nezaznamenala sa vôbec žiadna reakcia. |

Negatívne asercie overia, že požiadavka nič nezapísala:

```php
$fake = Likes::fake();

$this->get('/posts');                         // a read-only page

$fake->assertNothingLiked();
$fake->assertNothingUnliked();
$fake->assertNothingReacted();
```

## Čo fake zaznamenáva

- Každý dokončený zápis bez ohľadu na cestu — fasádu, builder actor()/as(), injektovaný LikeManager, trait GivesLikes aj pomocníky InteractsWithLikes.
- Hromadné likeMany() / unlikeMany() zaznamenajú jeden záznam na každý model.
- Prepnutie sa zaznamená ako like alebo unlike podľa toho, čo vykonalo; react() sa zaznamená ako reakcia — overíte ju cez assertReacted(), nie assertLiked().
- Filter typu porovnáva zapísanú reakciu: páčik bez typu zodpovedá default\_reaction.
- Volania sa zaznamenávajú tak, ako prišli, takže idempotentné opakovanie sa započíta do assertLikedCount() aj assertLikedTimes().

## Pomocníky pre aktéra

Trait InteractsWithLikes pridáva pomocníky pre aktéra. Idú cez manažér, takže ich zaznamená aj Likes::fake() v tom istom teste:

```php
uses(RoundlyConsulting\Likes\Testing\InteractsWithLikes::class);

$this->actingAsLiker($user);
$this->likeAs($post, 'love');
$this->unlikeAs($post);
$this->toggleAs($post);
$this->likeAs($post, null, $otherUser);   // a one-off actor
```

likeAs(), unlikeAs() a toggleAs() prijímajú (model, ?type, ?actor). Bez argumentu aktéra a bez predchádzajúceho actingAsLiker() vyhodia RuntimeException.

## Pest matchery

Matchery zaregistrujte raz v tests/Pest.php:

```php
// tests/Pest.php
RoundlyConsulting\Likes\Testing\LikeExpectations::register();

// in a test
expect($post)->toBeLikedBy($user);
expect($post)->toBeLikedBy($user, 'love');
expect($post)->toHaveReaction('love');
```

Matchery sú chránené podmienkou function\_exists('expect'), takže Pest sa nikdy nedostane do vášho runtime.

## Factory

Páčiky pripravíte priamo cez factory modelu:

```php
use RoundlyConsulting\Likes\Models\Like;

Like::factory()
    ->forActor($user)
    ->forLikeable($post)
    ->ofType('love')
    ->create();
```

Like::factory() vytvorí model nastavený v likes.model, vygeneruje actor\_id / likeable\_id typu podľa key\_type a ako type predvolene použije default\_reaction; zvyšok nastavíte cez forActor(), forLikeable() a ofType(). Záznamy zapisuje priamo — bez udalostí balíka a bez kontroly povoleného zoznamu —, takže je ideálna na prípravu stavu pred testovaným správaním.

## Kompletný príklad

```php
use RoundlyConsulting\Likes\Facades\Likes;

it('lets a reader love a post', function () {
    config()->set('likes.reactions', ['like', 'love']);

    $fake = Likes::fake();
    $user = User::factory()->create();
    $post = Post::factory()->create();

    Likes::actor($user)->as('love')->like($post);

    $fake->assertLikedBy($user, $post, 'love');
    expect($post)->toBeLikedBy($user, 'love')      // LikeExpectations::register() in Pest.php
        ->and($post->reactionSummary()->top)->toBe('love');
});
```

## Prejavte lásku k open source

Tento balík je zadarmo pod licenciou MIT. Ak vám šetrí čas, jednorazový príspevok alebo členstvo na Patreone nám pomôže ho ďalej udržiavať, testovať a dokumentovať.

[Ďalšie spôsoby podpory vrátane kryptomien](https://roundly-consulting.com/sk/podporte-nas.md)

Odoslaním daru súhlasíte s našimi [podmienkami prijímania darov](https://roundly-consulting.com/sk/podmienky-darov.md).

[Podporte našu open-source prácu (otvorí sa v novej karte)](https://donate.stripe.com/dRmeVe8FX5PF1Qd9pXcEw00) [Pridajte sa k nám na Patreone (otvorí sa v novej karte)](https://www.patreon.com/cw/roundly)

## Chcete to zabudovať do svojho produktu?

Naše balíky integrujeme do zákazkových Laravel a AI riešení. Napíšte nám, na čom pracujete, a ozveme sa do 48 hodín.

[Ponuka do 48 hodín](https://roundly-consulting.com/sk/kontakt.md) [Prezrieť všetky balíky](https://roundly-consulting.com/sk/open-source/navody/likes-for-laravel.md)
