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

Onboarding::fake() nahradí manager objektom OnboardingFake — vo fasáde aj v kontajneri, takže ho použijú aj vložené managery a trait GetsOnboarded — a vráti ho. Fake:

  • ponechá všetky toky aj resolver zaregistrované pred ním, takže toky sa vyhodnocujú normálne;
  • zachytí udalosti balíka StepCompleted a FlowCompleted, podobne ako Bus::fake();
  • zaznamená každé skrytie kroku — Onboarding::for($user)->dismiss(), dismiss() na toku aj $user->dismissOnboardingStep();
  • nahradí store úložiskom v pamäti, ktoré môžete naplniť; useStore() sa pod fakom ignoruje.
use RoundlyConsulting\Onboarding\Facades\Onboarding;

$fake = Onboarding::fake();

$fake->seedCompleted($user, 'verify-email');   // completedAt() reports it; record() skips it
$fake->seedDismissed($user, 'add-bio');        // the step drops out of $user's flow

$user->onboarding()->record('photo');
$user->dismissOnboardingStep('tour');

$fake->assertStepCompleted('photo')
     ->assertFlowCompleted()           // optionally pass a flow title to filter
     ->assertStepNotCompleted('bio')
     ->assertDismissed('tour', $user)  // subject optional
     ->assertNotDismissed('add-bio');  // seeding is not a dismissal

Onboarding::fake()->assertNothingRecorded()->assertNothingDismissed();

Asercie

MetódaÚčel
assertStepCompleted(string $key, ?callable $callback = null)Pre kľúč bola odoslaná StepCompleted; voliteľný callback dostane udalosť a vráti bool.
assertStepNotCompleted(string $key)Pre kľúč nebola odoslaná žiadna StepCompleted.
assertFlowCompleted(?string $flowKey = null)Bola odoslaná FlowCompleted; voliteľný argument filtruje podľa názvu toku.
assertNothingRecorded()Nebola odoslaná ani jedna z udalostí.
assertDismissed(string $step, $subject = null)Krok bol skrytý — pre daný subjekt (uložené modely sa porovnávajú podľa kľúča) alebo pre akýkoľvek.
assertNotDismissed(string $step, $subject = null)Krok nebol skrytý. Naplnenie cez seedDismissed() sa nepočíta.
assertNothingDismissed()Nezaznamenalo sa žiadne skrytie.

Každá asercia vracia fake, takže ich môžete reťaziť, a každú zavoláte aj staticky — Onboarding::assertDismissed(…). assertFlowCompleted() filtruje podľa názvu toku, nie podľa kľúča v registri — udalosť nesie samotný Flow.

Naplnenie store

MetódaÚčel
seedCompleted($subject, string ...$steps)completedAt() vráti pre kroky aktuálny čas dokončenia, takže ich record() neohlási.
seedDismissed($subject, string ...$steps)Kroky sa považujú za skryté — zmiznú, ak sú voliteľné a skryteľné.

Príklad v Pest

use App\Models\User;
use RoundlyConsulting\Onboarding\Facades\Onboarding;

it('announces the photo step for the uploading user', function () {
    $fake = Onboarding::fake();

    $user = User::factory()->create(['avatar_path' => 'avatars/jane-doe.jpg']);

    $user->onboarding()?->record('photo');

    $fake->assertStepCompleted('photo', fn ($event) => $event->for === $user)
         ->assertStepNotCompleted('bio');
});

it('hides the bio step once the user says not now', function () {
    Onboarding::fake();

    $user = User::factory()->create();

    Onboarding::for($user)?->dismiss('add-bio');     // 'add-bio' is optional()->dismissible()

    Onboarding::assertDismissed('add-bio', $user);   // static calls work too
    expect(Onboarding::for($user)?->hasStep('add-bio'))->toBeFalse();
});

Priame testovanie postupu

Postup sa odvodzuje z údajov, takže väčšina testov fake vôbec nepotrebuje — pripravte model a prečítajte tok:

it('sends a fresh account to the photo step', function () {
    $user = User::factory()->create(['avatar_path' => null]);

    expect($user->hasCompletedOnboarding())->toBeFalse()
        ->and($user->onboardingProgress())->toBe(0.0)
        ->and($user->nextOnboardingStep()?->stepKey())->toBe('photo');
});

Manager je singleton v kontajneri, takže nová aplikácia v každom teste začína s tokmi, ktoré zaregistrujú vaše service providery. Ak test registruje vlastné toky, začnite načisto cez Onboarding::flush() alebo forget().

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.