NovinkaZverejnili sme 50+ Laravel balíkov ako open source
Custom AI apps, agents and automation — Roundly ConsultingRoundly
Všetky balíky

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:

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

AserciaPrejde, 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:

$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:

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:

// 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:

use RoundlyConsulting\Likes\Models\Like;

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

Factory zapisuje záznamy priamo — bez udalostí a bez kontroly povoleného zoznamu — takže je ideálna na prípravu stavu pred testovaným správaním.

Kompletný príklad

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

Odoslaním daru súhlasíte s našimi podmienkami prijímania darov.

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.