Testovanie
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 kryptomienOdoslaní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.