---
title: "Testovanie — Options for Laravel | Roundly"
description: "Options::fake() zaznamená každý zápis v pamäti a ponúka šesť asercií; alebo testujte proti skutočnej tabuľke so stavmi factory."
url: https://roundly-consulting.com/sk/open-source/navody/options-for-laravel/testovanie
language: sk
---

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

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

# Testovanie

Options::fake() nahradí manager úložiskom v pamäti: nič sa nedotkne databázy a každý zápis sa zaznamená. Vráti fake (RoundlyConsulting\\Options\\Testing\\OptionsFake, podtriedu OptionsManager) na asercie; každá asercia funguje aj staticky, ako Options::assertSet(…):

```php
use RoundlyConsulting\Options\Facades\Options;

it('records writes from every entry point', function () {
    $fake = Options::fake();
    $user = User::factory()->create();

    Options::set(ThemeOption::class, 'dark');          // the facade
    $user->option(ThemeOption::class)->set('light');   // the HasOptions trait
    LocaleOption::for($user)->forget();                // an option instance

    expect(Options::get(ThemeOption::class))->toBe('dark'); // reads come from memory

    $fake->assertSet(ThemeOption::class, 'dark');          // global scope
    $fake->assertSet(ThemeOption::class, 'light', $user);  // the user's scope
    $fake->assertSet(ThemeOption::class);                  // set to anything, globally
    $fake->assertForgotten(LocaleOption::class, $user);
    $fake->assertNothingImported();
});

it('records imports', function () {
    Options::fake();

    Options::import('[{"key": "theme", "value": "dark"}]');

    Options::assertImported();                                               // static form
    Options::assertImported(fn (array $payloads) => count($payloads) === 1); // list<OptionPayload>
});

it('changes nothing on a read-only page', function () {
    $fake = Options::fake();

    $this->get('/dashboard')->assertOk();

    $fake->assertNothingSet();
    $fake->assertNothingForgotten();
    $fake->assertNothingImported();
});
```

## Asercie

| Asercia | Prejde, keď |
| --- | --- |
| `assertSet($option, $value = null, $owner = null)` | Nastavenie sa v danom rozsahu (null = globálny) zapísalo — na $value v podobe, v akej ste ju odovzdali, alebo na čokoľvek, ak je $value null. |
| `assertNothingSet()` | Nezapísalo sa vôbec žiadne nastavenie. |
| `assertForgotten($option, $owner = null)` | Nastavenie sa v danom rozsahu zabudlo (alebo resetovalo). |
| `assertNothingForgotten()` | Nič sa nezabudlo ani neresetovalo. |
| `assertImported(?Closure $callback = null)` | Prebehol import() — voliteľne taký, ktorého list<OptionPayload> prejde callbackom. |
| `assertNothingImported()` | Nič sa neimportovalo. |

## Čo fake pokrýva

Každá operácia s hodnotou ide cez manager, takže fake vidí všetky: fasádu, OptionsManager získaný po zavolaní faku, handly for() / option() / key() / group(), inštancie nastavení ako ThemeOption::for($user)->set(), trait HasOptions, helpery options() a setting() aj @option. Tam, kde by si to test všimol, sa správa ako skutočný manager:

- Zápisy sa overujú podľa rules() — neplatný zápis vyhodí výnimku a nezaznamená sa.
- Čítania vracajú typ castu presne ako s databázou; setMany() a zápisy skupín overia najprv celú dávku.
- export() a exportJson() čítajú z pamäte so skutočnými pravidlami rozsahov; pamäť drží to, čo by držala databáza — surové reťazce, pri šifrovanom nastavení šifrový text. import() sa zaznamená a nahrá do nej; hodnota, ktorá nie je skalárna, vyhodí InvalidOptionPayload ako v skutočnom manageri a nič sa nezaznamená.
- Kľúče, ktoré ste zaregistrovali cez Options::register() pred zavolaním fake(), sa naďalej nájdu.
- Riadenie prístupu aj observery naďalej bežia; eventy sa nespúšťajú a cache sa nepoužíva.
- assertSet() porovnáva hodnotu v podobe, v akej ste ju odovzdali, nie po caste.

## Testy s databázou

Pamäť v rámci requestu je naviazaná v kontajneri, takže každý test so svojou novou aplikáciou začína s prázdnou. Trvalá cache však žije vo vašom cache úložisku — ak testy zdieľajú úložisko, ktoré aplikáciu prežije (file, Redis), vyprázdnite ju v beforeEach:

```php
use RoundlyConsulting\Options\Facades\Options;
use RoundlyConsulting\Options\Option;

beforeEach(fn () => Options::flushCache());

it('reads a seeded global value', function () {
    Option::factory()->global()->create(['key' => 'theme', 'value' => 'dark']);

    expect(Options::get(ThemeOption::class))->toBe('dark');
});
```

## Stavy factory

```php
use RoundlyConsulting\Options\Option;

Option::factory()->global()->create(['key' => 'theme', 'value' => 'dark']);
Option::factory()->forOwner($user)->value('light')->create(['key' => 'theme']);
Option::factory()->withMeta(['source' => 'seed'])->create();
```

Factory zapisuje value bez úprav, preto pri nastaveniach s iným castom ako string ukladajte serializovanú podobu.

## Testy samotného 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/options-for-laravel.md)
