---
title: "Testovanie — Forms for Laravel | Roundly"
description: "Aktivitu formulárov overíte cez Forms::fake() — zaznamenávajúci fake, ktorý operácie aj vykoná — plus pomocníky, Pest matchery a factories."
url: https://roundly-consulting.com/sk/open-source/navody/forms-for-laravel/testovanie
language: sk
---

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

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

# Testovanie

Forms::fake() nahradí manažéra triedou FormsFake — zaznamenávajúcim podtypom FormsManager, takže platí aj pre injektovaných manažérov — a vráti ju ako váš handle. Operácie stále bežia nad databázou: očakávané riadky naozaj vzniknú, udalosti sa spustia a schvaľovanie stále otvorí svoju žiadosť. Fake navrch zaznamená každé volanie — cez fasádu, injektovaného manažéra, buildery, Forms::submission(), trait HasForms aj forms:sync:

```php
use RoundlyConsulting\Approvals\Models\ApprovalRequest;
use RoundlyConsulting\Forms\Facades\Forms;
use RoundlyConsulting\Forms\Models\FormSubmission;

$fake = Forms::fake();

// ... exercise your application code that submits the form ...

$fake->assertSubmitted($form);
$fake->assertSubmitted($form, fn ($result, $form) => $result->fieldCount === 3);
$fake->assertSubmittedCount(1);
$fake->assertNotSubmitted($otherForm);
$fake->assertReviewOpened(fn (ApprovalRequest $request, FormSubmission $submission) => $request->quorum === 2);
```

## Všetky aserty

| Zaznamenáva | Aserty | Aserty „nič“ |
| --- | --- | --- |
| submit(), $user->submitTo() | `assertSubmitted(?Form, ?callable)`, `assertSubmittedCount(int)`, `assertNotSubmitted(?Form)` | `assertNothingSubmitted()` |
| draft(), $user->draftTo() | `assertDrafted(?Form, ?callable)` | `assertNothingDrafted()` |
| finalize(), submission()->finalize() | `assertFinalized(?string $uuid)` | `assertNothingFinalized()` |
| define() | `assertFormDefined(string $key)` | `assertNoFormDefined()` |
| create(), define()->create() | `assertFormCreated(?callable)` | `assertNoFormCreated()` |
| update()->save() | `assertFormUpdated(string $key)` | `assertNoFormUpdated()` |
| createSubmission() | `assertSubmissionCreated(?callable)` | `assertNoSubmissionCreated()` |
| sync(), forms:sync | `assertSynced()` | `assertNothingSynced()` |
| review()->…->open() | `assertReviewOpened(?callable)` | `assertNothingReviewed()` |

```php
use RoundlyConsulting\Approvals\Models\ApprovalRequest;
use RoundlyConsulting\Forms\DataTransferObjects\SubmissionResult;
use RoundlyConsulting\Forms\Models\Form;
use RoundlyConsulting\Forms\Models\FormSubmission;
use RoundlyConsulting\Forms\Models\Submission;

// submit(), $user->submitTo()
$fake->assertSubmitted($form, fn (SubmissionResult $result, Form $form) => $result->fieldCount === 3);
$fake->assertSubmittedCount(1);
$fake->assertNotSubmitted($otherForm);
$fake->assertNothingSubmitted();

// draft(), $user->draftTo()
$fake->assertDrafted($form, fn (SubmissionResult $result, Form $form) => $result->fieldCount > 0);
$fake->assertNothingDrafted();

// finalize(), Forms::submission($uuid)->finalize()
$fake->assertFinalized($draft->uuid);
$fake->assertNothingFinalized();

// define(), create(), update()->save()
$fake->assertFormDefined('contact');
$fake->assertNoFormDefined();
$fake->assertFormCreated(fn (Form $form) => $form->key === 'contact');
$fake->assertNoFormCreated();
$fake->assertFormUpdated('contact');     // only once save() has run
$fake->assertNoFormUpdated();

// createSubmission()
$fake->assertSubmissionCreated(fn (Submission $row) => $row->uuid === $uuid);
$fake->assertNoSubmissionCreated();

// sync(), php artisan forms:sync
$fake->assertSynced();
$fake->assertNothingSynced();

// review()->…->open()
$fake->assertReviewOpened(fn (ApprovalRequest $request, FormSubmission $submission) => $request->quorum === 2);
$fake->assertNothingReviewed();
```

- assertSubmitted() a assertDrafted() porovnávajú podľa kľúča formulára; ich callbacky dostanú SubmissionResult a Form a pre jedno zaznamenané volanie musia vrátiť true.
- assertFormCreated() vidí formuláre uložené cez Forms::create() a define()->create(); formuláre vytvorené v rámci sync() splnia len assertSynced().
- assertFormDefined($key) prejde, ak bežalo define($key, …) alebo vznikol formulár s týmto kľúčom.
- Úprava sa zaznamená až pri save() — samotné Forms::update($key) nezaznamená nič, takže assertFormUpdated() prejde až po save().
- Callbacky assertReviewOpened() dostanú ApprovalRequest a FormSubmission.

## Testovacie pomocníky

Trait InteractsWithForms pridáva fakeForms(), submitForm($form, $values, $sender) a draftForm(...). Hodnoty sú vnorené podľa skupín alebo ploché podľa group\_key.field\_key (v jednej skupine jeden štýl) — kľúč formulára doplní pomocník za vás:

```php
uses(RoundlyConsulting\Forms\Testing\InteractsWithForms::class);

$fake = $this->fakeForms();
$this->submitForm($form, ['details' => ['name' => 'Ann']]);
$this->submitForm($form, ['details.name' => 'Ann']);   // the same submission, flat
$fake->assertSubmitted($form);
```

## Pest matchery

Matchery pre expect() zapnete v tests/Pest.php:

```php
RoundlyConsulting\Forms\Testing\FormExpectations::register();

expect($form)->toBeAcceptingSubmissions();
expect($expiredForm)->toBeExpired();
```

## Úplný príklad

```php
use RoundlyConsulting\Forms\Facades\Forms;
use RoundlyConsulting\Forms\GroupBuilder;

it('stores a contact submission', function () {
    $fake = Forms::fake();

    $form = Forms::define('contact', 'Contact us')
        ->public()
        ->group('details', 'Details', function (GroupBuilder $g): void {
            $g->field('name', 'Name')->required();
        })
        ->create();

    $this->post('/contact', ['contact' => ['details' => ['name' => 'Ann']]])
        ->assertRedirect();

    $fake->assertSubmitted($form, fn ($result) => $result->fieldCount === 1);
    expect(Forms::submissions($form)->first()->value('name'))->toBe('Ann');
});
```

## Factories

Každý model má factory so stavmi pre bežné prípady:

```php
use RoundlyConsulting\Forms\Models\Form;
use RoundlyConsulting\Forms\Models\FormSubmission;
use RoundlyConsulting\Forms\Models\Submission;

Form::factory()->public()->create();
Form::factory()->withExpiration()->create();

Submission::factory()->draft()->create();
FormSubmission::factory()->pending()->create();
```

Testy spúšťajte s načítanými migráciami formulárov (aj závislých balíkov), napríklad cez RefreshDatabase. Vlastné testy balíka spustíte takto:

```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/forms-for-laravel.md)
