---
title: "Testovanie — Appointments for Laravel | Roundly"
description: "Zaznamenajte každý zápis rezervácií cez Appointments::fake() a jeho asercie, na zvyšok použite factory modelu a ukážkové testy v Peste."
url: https://roundly-consulting.com/sk/open-source/navody/appointments-for-laravel/testovanie
language: sk
---

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

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

# Testovanie

Appointments::fake() podstrčí zaznamenávajúci AppointmentsFake — za fasádu aj do kontajnera, takže fake dostane aj injektovaný AppointmentManager — a vráti ho. Operácie naďalej bežia nad databázou: kontroly dostupnosti, čítanie cez participants() aj eventy balíka fungujú ďalej. Zaznamená sa každý zápis, či prišiel cez fasádu, injektovaný manažér, builder, handle for() alebo skratku na modeli, napríklad $appointment->cancel():

```php
use RoundlyConsulting\Appointments\Enums\Status;
use RoundlyConsulting\Appointments\Facades\Appointments;
use RoundlyConsulting\Appointments\Models\Appointment;

$fake = Appointments::fake();

$this->post('/bookings', [...]);

$fake->assertScheduled(fn (Appointment $appointment) => $appointment->name === 'Consultation');
$fake->assertTransitioned(fn (Appointment $appointment, Status $to, Status $from) => $to === Status::Cancelled);
$fake->assertRescheduled(fn (Appointment $appointment, $previousStartsAt) => true);
$fake->assertParticipantAdded(fn (Appointment $appointment, $participant, $row) => $participant->is($user));
$fake->assertParticipantRemoved(fn (Appointment $appointment, $participant) => $participant->is($user));

$fake->assertNothingScheduled();
$fake->assertNothingRescheduled();
$fake->assertNothingTransitioned();
$fake->assertNoParticipantAdded();
$fake->assertNoParticipantRemoved();
```

## Všetky asercie

| Asercia | Callback dostane | Zaznamená ju |
| --- | --- | --- |
| `assertScheduled(?Closure) · assertNothingScheduled()` | Appointment | create(), schedule()->create(), createRecurring() — jeden záznam na výskyt. |
| `assertRescheduled(?Closure) · assertNothingRescheduled()` | Appointment, CarbonImmutable $previousStartsAt | for()->reschedule(). |
| `assertTransitioned(?Closure) · assertNothingTransitioned()` | Appointment, Status $to, Status $from | for()->transition() a jej skratky, plus confirm(), cancel(), complete(), decline(), markNoShow() a transitionTo() na modeli. |
| `assertParticipantAdded(?Closure) · assertNoParticipantAdded()` | Appointment, Model $participant, Participant $row | for()->participants()->add(). |
| `assertParticipantRemoved(?Closure) · assertNoParticipantRemoved()` | Appointment, Model $participant — odobraný riadok sa zaznamená ako jeho model | for()->participants()->remove(). |

- Každý callback je voliteľný — bez neho asercia prejde, ak sa zaznamenalo čokoľvek daného druhu.
- Každá asercia funguje aj staticky na fasáde, napríklad Appointments::assertScheduled().
- Účastníci uvedení pri novom termíne patria k jeho naplánovaniu; ako pridaný sa ráta len participants()->add().
- Požiadavka na stav, ktorý termín už má, nič neurobí, preto sa nezaznamená ako prechod.
- Odmietnuté volanie — také, ktoré vyhodí výnimku — sa nezaznamená. Zmeny stavu zo synchronizačného listenera schvaľovania nie sú volaniami hostiteľskej aplikácie, takže sa nezaznamenajú tiež.
- Priamo volané akcie fake obchádzajú.

```php
Appointments::fake();

Appointments::for($appointment)->cancel();   // or $appointment->cancel() — recorded either way

Appointments::assertTransitioned(fn (Appointment $appointment, Status $to) => $to === Status::Cancelled);
Appointments::assertNothingScheduled();
```

## Factory modelu

Model Appointment z balíka má factory — čakajúci termín so začiatkom zajtra a trvaním 60 minút — a stav withStatus():

```php
use RoundlyConsulting\Appointments\Enums\Status;
use RoundlyConsulting\Appointments\Models\Appointment;

$appointment = Appointment::factory()->create();          // pending, starts tomorrow, 60 minutes

$confirmed = Appointment::factory()
    ->withStatus(Status::Confirmed)
    ->create(['starts_at' => now()->addWeek()]);
```

## Ukážkové testy

Fakujte len eventy, ktoré overujete, a používajte ten istý builder a pomocné metódy ako vaša aplikácia:

```php
use Illuminate\Support\Facades\Event;
use RoundlyConsulting\Appointments\Enums\Status;
use RoundlyConsulting\Appointments\Events\AppointmentStatusChanged;
use RoundlyConsulting\Appointments\Exceptions\SchedulingConflictException;
use RoundlyConsulting\Appointments\Facades\Appointments;
use RoundlyConsulting\Appointments\Models\Appointment;

it('confirms a booking and announces it', function () {
    Event::fake([AppointmentStatusChanged::class]);

    $appointment = Appointment::factory()->create();
    Appointments::for($appointment)->confirm();

    expect($appointment->status)->toBe(Status::Confirmed);
    Event::assertDispatched(
        AppointmentStatusChanged::class,
        fn (AppointmentStatusChanged $e) => $e->from === Status::Pending && $e->to === Status::Confirmed,
    );
});

it('blocks a double booking', function () {
    $doctor = User::factory()->create();

    Appointments::schedule('First')->startingAt('2026-07-01 09:00')->lasting(60)
        ->withParticipant($doctor)->create();

    expect(fn () => Appointments::schedule('Clash')->startingAt('2026-07-01 09:30')->lasting(60)
        ->withParticipant($doctor)->preventConflicts()->create()
    )->toThrow(SchedulingConflictException::class);
});
```

Testy spúšťajte s načítanými publikovanými migráciami (RefreshDatabase) — tabuľkami termínov aj tabuľkami provider balíkov z Inštalácie.

## Vlastná sada testov balíka

```bash
composer test
```

## 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/appointments-for-laravel.md)
