---
title: "Testovanie — Addresses for Laravel | Roundly"
description: "Zaznamenávajúci Addresses::fake(), asercie InteractsWithAddresses, AddressFactory so stavmi billing, shipping a primary a príklad v Peste."
url: https://roundly-consulting.com/sk/open-source/navody/addresses-for-laravel/testovanie
language: sk
---

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

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

# Testovanie

## Zaznamenávajúci fake

Addresses::fake() nahradí manažéra — pre fasádu aj pre všetko, čo injektuje AddressManager — zaznamenávajúcim fake, ktorý nič nezapíše, a vráti ho. Pridané adresy zostanú v pamäti, neuložené, a čítania vlastníka (all(), ofType(), primary()) odpovedajú z uložených záznamov s premietnutými pridaniami, úpravami, zmazaniami a zmenami primárnej adresy z fake — primary() tak vráti to isté, čo by po rovnakých volaniach vrátil skutočný manažér. Rovnako ako skutočný manažér update() vyplní adresu, ktorú odovzdáte, a vráti tú istú inštanciu, neuloženú, takže druhé update() či delete() cez tú istú premennú sa v čítaniach prejaví. Vlastníctvo sa stále kontroluje a rovnako aj zákaz povýšiť zmazanú adresu — oboje voči uloženému záznamu, nie voči odovzdanej kópii. Zaznamenajú sa aj volania cez trait HasAddresses:

```php
use RoundlyConsulting\Addresses\DataTransferObjects\AddressData;
use RoundlyConsulting\Addresses\Facades\Addresses;

$fake = Addresses::fake();

$user->addAddress($data);                       // your code under test
Addresses::for($user)->setPrimary($address);

$fake->assertAdded($user, fn (AddressData $d) => $d->city === 'Bratislava');
$fake->assertPrimarySet($address);
$fake->assertNothingDeleted();
```

| Asercia | Opak |
| --- | --- |
| `assertAdded(?Model $to = null, ?Closure $where = null)` | `assertNothingAdded()` |
| `assertUpdated(?Address $address = null, ?Closure $where = null)` | `assertNothingUpdated()` |
| `assertDeleted(?Address $address = null)` | `assertNothingDeleted()` |
| `assertPrimarySet(?Address $address = null)` | `assertNothingPrimarySet()` |

Každý argument je voliteľný. assertAdded() filtruje podľa vlastníka a closure nad zaznamenaným AddressData; assertUpdated() prijíma adresu a closure nad jej AddressData.

## Asercie nad databázou

Pri testoch s databázou pridáva trait InteractsWithAddresses dve asercie. V Peste ho použite cez uses(), v PHPUnite ako trait v triede testu:

```php
use RoundlyConsulting\Addresses\Enums\AddressType;
use RoundlyConsulting\Addresses\Testing\InteractsWithAddresses;

uses(InteractsWithAddresses::class);

$this->assertHasAddress($payer, ['city' => 'Bratislava']);
$this->assertPrimaryAddress($payer, AddressType::Office);
```

```php
use RoundlyConsulting\Addresses\Testing\InteractsWithAddresses;
use Tests\TestCase;

final class CustomerAddressTest extends TestCase
{
    use InteractsWithAddresses;
}
```

| Asercia | Prejde, keď |
| --- | --- |
| `assertHasAddress(Model $addressable, array $criteria = [])` | Model má adresu, ktorá spĺňa každú dvojicu stĺpec => hodnota; bez kritérií stačí akákoľvek adresa. |
| `assertPrimaryAddress(Model $addressable, AddressType $type)` | Model má primárnu adresu daného typu. |

assertHasAddress() porovnáva kritériá so stĺpcami tabuľky addresses, preto zadávajte uložené hodnoty — \['type' => 'billing', 'country\_iso' => 'SK'\] — nie prípady enumu. Mäkko zmazané adresy sa nerátajú.

## Factory

Address::factory() generuje realistické adresy. Predvolená definícia vytvorí bežnú adresu — is\_primary je false, primárnu si vyžiadate stavom primary() — predvoleného typu, s faker názvom, mestom, ulicou a PSČ a trojpísmenovým country\_iso:

| Stav | Účinok |
| --- | --- |
| `primary()` | Nastaví is\_primary na true. |
| `ofType(AddressType $type)` | Nastaví type na hodnotu enumu. |
| `billing()` | Skratka pre ofType(AddressType::Billing). |
| `shipping()` | Skratka pre ofType(AddressType::Shipping). |

```php
use RoundlyConsulting\Addresses\Address;
use RoundlyConsulting\Addresses\Enums\AddressType;

// through the owner's relation — sets addressable_type and addressable_id for you
$customer->addresses()->save(Address::factory()->billing()->primary()->make());

// standalone, with the owner set explicitly
Address::factory()->shipping()->create([
    'addressable_type' => $customer->getMorphClass(),
    'addressable_id' => $customer->getKey(),
]);

Address::factory()->ofType(AddressType::Office)->make();
```

Factory zapisuje záznamy priamo — bez normalizácie krajiny, bez AddressCreated, bez rušenia primárneho príznaku ostatným adresám — a vytvára model nastavený v addresses.model, takže s vlastnou podtriedou vznikajú záznamy ako táto podtrieda, s jej castmi, udalosťami a observermi. Na PostgreSQL a SQLite čiastočný unikátny index aj tak odmietne druhú živú primárnu adresu v jednej skupine vlastník + typ.

## Kompletný test

```php
use Illuminate\Support\Facades\Event;
use RoundlyConsulting\Addresses\Enums\AddressType;
use RoundlyConsulting\Addresses\Events\PrimaryAddressChanged;
use RoundlyConsulting\Addresses\Testing\InteractsWithAddresses;

uses(InteractsWithAddresses::class);

it('promotes a saved shipping address', function () {
    Event::fake([PrimaryAddressChanged::class]);

    $customer = Customer::factory()->create();
    $address = $customer->newAddress()
        ->type(AddressType::Shipping)
        ->in('Bratislava')->at('Somewhere 1')->postalCode('81101')->country('sk')
        ->save();

    $customer->setPrimaryAddress($address);

    $this->assertHasAddress($customer, ['country_iso' => 'SK']);
    $this->assertPrimaryAddress($customer, AddressType::Shipping);
    Event::assertDispatched(PrimaryAddressChanged::class);
});
```

Spúšťajte ho s bežným nastavením databázy (napríklad RefreshDatabase) a s publikovanou migráciou balíka. Vlastnú sadu testov balíka spustíte v jeho repozitári 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/addresses-for-laravel.md)
