---
title: "Testovanie — Requests for Laravel | Roundly"
description: "Requests::fake() zaznamená každé volanie bez zápisov do databázy, alebo testujte skutočný engine so stavmi factory."
url: https://roundly-consulting.com/sk/open-source/navody/requests-for-laravel/testovanie
language: sk
---

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

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

# Testovanie

Requests::fake() podstrčí zaznamenávajúci fake za fasádu aj do kontajnera a vráti ho, takže naň narazí fasáda, fluentný builder aj každý RequestManager injektovaný cez konštruktor. Volania, ktoré menia stav, sa len zaznamenajú a databázy sa nedotknú — netreba ani ručné Event::fake(); canTransition() odpovedá naozaj:

```php
use RoundlyConsulting\Requests\Facades\Requests;

it('submits an expense claim', function () {
    $fake = Requests::fake();
    $alice = User::factory()->create();

    $request = Requests::make()->title('Expense')->create();
    Requests::approve($request, $alice, 'Within budget');

    $fake->assertCreated(1);
    $fake->assertApproved($request, $alice, 'Within budget');   // or Requests::assertApproved(...)
    $fake->assertNothingRejected();
});

it('submits nothing when the form is invalid', function () {
    $fake = Requests::fake();

    // …

    $fake->assertNothingCreated();
});
```

## Všetky asercie

| Asercia | Prejde, keď |
| --- | --- |
| `assertCreated(?int $times = null)` | bola vytvorená aspoň jedna žiadosť — alebo presne $times. |
| `assertNothingCreated()` | nebola vytvorená žiadna žiadosť. |
| `assertApproved(Request, ?Model $actor, ?string $reason)` | pre žiadosť bolo zavolané approve() — ak sú zadané, tak daným aktérom a s daným dôvodom. |
| `assertNothingApproved()` | approve() nebolo zavolané ani raz. |
| `assertRejected(Request, ?Model $actor, ?string $reason)` | to isté pre reject(). |
| `assertNothingRejected()` | reject() nebolo zavolané ani raz. |
| `assertReopened(Request, ?Model $actor, ?string $reason)` | to isté pre reopen(). |
| `assertNothingReopened()` | reopen() nebolo zavolané ani raz. |
| `assertCancelled(Request)` | pre žiadosť bolo zavolané cancel(). |
| `assertNothingCancelled()` | cancel() nebolo zavolané ani raz. |
| `assertExpired(Request)` | pre žiadosť bolo zavolané expire(). |
| `assertNothingExpired()` | expire() nebolo zavolané ani raz. |
| `assertExpiredDue(?bool $dryRun = null)` | prebehlo expireDue() — ak je zadaný, tak s daným príznakom skúšobného behu. |
| `assertNothingExpiredDue()` | expireDue() neprebehlo ani raz. |

```php
$fake = Requests::fake();

$fake->assertCreated();                           // at least one — or assertCreated(2) for exactly two
$fake->assertApproved($request);                  // actor and reason are optional filters
$fake->assertRejected($request, $carol, 'Out of policy');
$fake->assertReopened($request, $alice);
$fake->assertCancelled($request);
$fake->assertExpired($request);
$fake->assertExpiredDue();                        // expireDue() ran
$fake->assertExpiredDue(dryRun: true);            // …as a dry run

// Every assertion has a negative twin
$fake->assertNothingCreated();
$fake->assertNothingApproved();
$fake->assertNothingRejected();
$fake->assertNothingReopened();
$fake->assertNothingCancelled();
$fake->assertNothingExpired();
$fake->assertNothingExpiredDue();
```

Asercie zavoláte aj staticky na fasáde. create() na fake vráti neuloženú inštanciu vášho nakonfigurovaného requests.model, zostavenú presne ako pri skutočnom vytvorení — autor, stav, typ, názov, popis, meta údaje, kľúče deklarovaných schvaľovateľov a explicitný termín alebo termín z default\_ttl — a schvaľovateľa zadaného samotným id odmietne rovnako výnimkou InvalidApprover. approve(), reject() a reopen() zaznamenajú aj odovzdaný dôvod. expireDue() vráti počet žiadostí po termíne, no žiadnu neexpiruje — takže sa zaznamená aj requests:expire spustený pod fakom.

Asercie porovnávajú žiadosti aj aktérov podľa kľúča. Neuložená žiadosť — tú vracia create() na fake — kľúč nemá, preto sa zhoduje iba s tou istou inštanciou a dve žiadosti vytvorené pod fakom sa nikdy nezamenia.

## Stavy factory

Model Request má factory so stavom pre každý status a pomocníkmi pre schvaľovateľov a autorov. requiring() uloží iba id schvaľovateľov — schvaľovaciu požiadavku neotvorí:

```php
use RoundlyConsulting\Requests\Models\Request;

Request::factory()->pending()->create();
Request::factory()->approved()->create();
Request::factory()->rejected()->create();
Request::factory()->cancelled()->create();
Request::factory()->expired()->create();                       // New, expires_at yesterday
Request::factory()->requiring([$alice->id, $bob->id])->create();
Request::factory()->authoredBy($user)->create();
```

## Proti skutočnému enginu

Pri integračných testoch načítajte migrácie balíka aj schvaľovacieho enginu a spustite skutočný tok:

```php
use RoundlyConsulting\Requests\Enums\Status;
use RoundlyConsulting\Requests\Facades\Requests;
use RoundlyConsulting\Requests\Models\Request;

it('approves once both managers sign off', function () {
    $alice = User::factory()->create();
    $bob = User::factory()->create();

    $request = Requests::make()->requireApprovalsFrom([$alice, $bob])->create();

    Requests::approve($request, $alice);
    expect($request->fresh()->status)->toBe(Status::New);

    Requests::approve($request, $bob);
    expect($request->fresh()->status)->toBe(Status::Approved);
});

it('expires stale requests', function () {
    Request::factory()->expired()->create();

    $this->artisan('requests:expire')
        ->expectsOutput('Expired 1 request(s).')
        ->assertSuccessful();
});
```

Vlastné testy balíka spustíte príkazom:

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