---
title: "Testovanie — Money for Laravel | Roundly"
description: "Exchange::fake() nasadí statické kurzy a zaznamená aktualizácie, zápisy aj čistenie — overte každé volanie a naplňte tabuľku kurzov."
url: https://roundly-consulting.com/sk/open-source/navody/money-for-laravel/testovanie
language: sk
---

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

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

# Testovanie

Exchange::fake($rates, $pivot) nasadí statické kurzy — bez HTTP, bez cache — pre fasádu, injektovaný ExchangeManager aj Money::convertTo() a vráti fake, na ktorom overujete:

```php
use RoundlyConsulting\Money\Facades\Exchange;
use RoundlyConsulting\Money\Money;

it('converts the order total to dollars', function () {
    $fake = Exchange::fake(['EUR/USD' => '1.0854']);

    $usd = Money::ofMajor('10', 'EUR')->convertTo('USD');

    expect($usd->equals(Money::ofMajor('10.85', 'USD')))->toBeTrue();
    $fake->assertRateRequested('EUR', 'USD');
});

it('never asks for a rate within one currency', function () {
    $fake = Exchange::fake();

    Money::ofMajor('10', 'EUR')->convertTo('EUR');

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

Money::convertTo(), MoneyBag::total() aj každý neskôr vytvorený prevodník použijú fake. Chýbajúce páry sa invertujú alebo triangulujú cez pivot; inak ExchangeRateUnavailable. Pivotom je predvolene nakonfigurovaná money.exchange.pivot, rovnako ako pri skutočných driveroch; inú menu môžete odovzdať, null trianguláciu vypne. Kurzy môžete zadať aj podľa základnej meny: \['EUR' => \['USD' => '1.0854'\]\].

## Tabuľka kurzov sa zaznamenáva, nezapisuje

Pod fake Exchange::rates() len zaznamenáva — nič nesťahuje, nezapisuje, nezaraďuje do fronty ani nemaže — a rovnako aj príkazy money:rates:refresh a money:rates:prune. source() a extend() sa správajú ako skutočný manažér, takže surový zdroj ecb stále sťahuje; spojte ho s Http::fake(). Neznáma metóda vyhodí BadMethodCallException.

Fake pritom odmietne to isté, čo skutočné úložisko, a nič nezaznamená: store() a manual() vyhodia InvalidExchangeRate pre kurz bez presného desatinného zápisu s najviac 40 znakmi (napríklad 1/3) a refresh() vyhodí InvalidMoneyConfiguration pre driver, z ktorého sa sťahovať nedá (database, config, chain alebo neznámy názov) — overí to bez sťahovania.

```php
use RoundlyConsulting\Money\Facades\Exchange;

it('stores the manual CZK rate', function () {
    $fake = Exchange::fake();

    Exchange::rates()->manual('EUR', 'CZK', '25.10');   // recorded — nothing is written

    $fake->assertStored('EUR', 'CZK', '25.10', 'manual');
    $fake->assertNothingRefreshed();
});
```

## Všetky asercie

```php
use RoundlyConsulting\Money\Enums\EcbFeed;

$fake = Exchange::fake(['EUR/USD' => '1.0854']);

// ... code that converts, refreshes, stores or prunes ...

$fake->assertRateRequested('EUR', 'USD');             // rate() was asked for the pair — conversions included
$fake->assertRefreshed('ecb', EcbFeed::Daily);        // rates()->refresh() ran — source and feed optional
$fake->assertRefreshQueued('ecb');                    // rates()->refreshLater() ran — source and feed optional
$fake->assertStored('EUR', 'CZK', '25.10', 'manual'); // store() or manual() got the pair — rate and source optional
$fake->assertPruned($before);                         // rates()->prune() ran — cut-off day optional

// each has a twin that passes when nothing happened
$fake->assertNothingRequested();
$fake->assertNothingRefreshed();
$fake->assertNothingQueued();
$fake->assertNothingStored();
$fake->assertNothingPruned();

Exchange::rates()->assertStored('EUR', 'CZK');        // the rates-table asserts also live on the faked rates()
```

| Asercia | Prejde, keď | Opak |
| --- | --- | --- |
| `assertRateRequested($from, $to)` | rate() bol požiadaný o pár — vrátane prevodov. | `assertNothingRequested()` |
| `assertRefreshed(?$source, ?$feed)` | rates()->refresh() prebehol, voliteľne pre daný zdroj a feed. | `assertNothingRefreshed()` |
| `assertRefreshQueued(?$source, ?$feed)` | rates()->refreshLater() prebehol. | `assertNothingQueued()` |
| `assertStored($from, $to, ?$rate, ?$source)` | store() alebo manual() dostal kurz pre pár; kurz sa porovnáva presne. | `assertNothingStored()` |
| `assertPruned(?$before)` | rates()->prune() prebehol, voliteľne s týmto hraničným dňom. | `assertNothingPruned()` |

Currencies nemá fake: register je v pamäti a deterministický.

## Naplnenie dát a simulácia zdrojov

```php
use Illuminate\Support\Facades\Http;
use RoundlyConsulting\Money\Models\CurrencyRate;

// Seed the rates table for the database driver (run the published migration in your test setup)
CurrencyRate::factory()->pair('EUR', 'USD', '1.10')->on('2026-09-25')->from('ecb')->create();

// Fake the ECB feed for the ecb driver
Http::fake(['*eurofxref-daily.xml' => Http::response($xml)]);
```

## Tipy

- Sumy vytvárajte cez ofMinor() alebo ofMajor() a overujte cez equals() alebo minor() — obe sú presné.
- Pre presné porovnanie formátovaného výstupu použite decimal formátovač; pri intl normalizujte medzery — verzie ICU zamieňajú NBSP a NNBSP.
- V testoch kurzov zmrazte čas cez CarbonImmutable::setTestNow() — vyhľadávanie bez dátumu berie „dnes“ v money.exchange.timezone.

```xml
<!-- phpunit.xml — byte-exact formatting on every machine -->
<php>
    <env name="MONEY_FORMATTER" value="decimal"/>
</php>
```

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