---
title: "Testovanie — Contacts for Laravel | Roundly"
description: "Nahraďte manažéra zaznamenávajúcim Contacts::fake() a overte každý zápis, pripravte dáta stavmi factory a overujte vlastníkov Pest matchermi."
url: https://roundly-consulting.com/sk/open-source/navody/contacts-for-laravel/testovanie
language: sk
---

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

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

# Testovanie

## Zaznamenávajúci fake

Contacts::fake() nahradí manažéra triedou ContactsFake a vráti ju — dostanú ju aj manažéri injektovaní cez konštruktor. Nič sa nezapíše a nespustí sa žiadna udalosť: pridané kontakty sa vrátia neuložené (štruktúrovaná adresa sa premietne do value, no neuloží sa). Pridania a synchronizácie sa napriek tomu kontrolujú ako skutočné — neplatná hodnota alebo štruktúrovaná adresa na inom než adresnom druhu vyhodí tú istú InvalidContactValue a nič sa nezaznamená — a neuložené kontakty nesú to, čo by uložili skutočné: normalizovanú hodnotu, druh (pri synchronizácii synchronizovaný druh pre každú položku), pozíciu a príznak primárneho kontaktu, ktorý by zanechal skutočný zápis (pridaný kontakt je primárny, ak je prvý svojho druhu a je zapnuté auto\_primary). Každý zápis sa zaznamená — cez fasádu, injektovaného manažéra, adresár kontaktov, verification(), trait HasContacts aj $contact->requestVerification() / confirmVerification(). Čítanie naďalej ide do databázy:

```php
use Illuminate\Database\Eloquent\Model;
use RoundlyConsulting\Contacts\DataTransferObjects\ContactData;
use RoundlyConsulting\Contacts\Facades\Contacts;

$fake = Contacts::fake();

$user->addEmail('a@b.com');
$contact->requestVerification();

$fake->assertAdded(fn (ContactData $data, Model $owner) => $data->value === 'a@b.com');
$fake->assertVerificationRequested($contact);   // the Contact argument is optional
$fake->assertNothingDeleted();
```

| Zaznamená | Asercia | Asercia, že nič |
| --- | --- | --- |
| `for()->…->add(), for()->add(), trait add*()` | `assertAdded(?Closure(ContactData, Model))` | `assertNothingAdded()` |
| `for()->sync()` | `assertSynced(ContactType\|string\|null, ?Closure(list<ContactData>, Model))` | `assertNothingSynced()` |
| `update()` | `assertUpdated(?Contact, ?Closure(ContactData))` | `assertNothingUpdated()` |
| `delete()` | `assertDeleted(?Contact)` | `assertNothingDeleted()` |
| `setPrimary()` | `assertPrimarySet(?Contact)` | `assertNothingPrimarySet()` |
| `verification()->markVerified()` | `assertVerified(?Contact)` | `assertNothingVerified()` |
| `verification()->request(), $contact->requestVerification()` | `assertVerificationRequested(?Contact)` | `assertNoVerificationRequested()` |
| `verification()->confirm(), $contact->confirmVerification()` | `assertVerificationConfirmed(?Contact)` | `assertNoVerificationConfirmed()` |

- Každý argument Contact je voliteľný — zadajte ho, ak chcete overiť konkrétny kontakt.
- Closure dostane zaznamenané ContactData (pred normalizáciou) a vlastníka; assertUpdated() odovzdá len ContactData.
- verification()->request() vráti pri fake hodnotu fake-token.

```php
use Illuminate\Database\Eloquent\Model;
use RoundlyConsulting\Contacts\DataTransferObjects\ContactData;
use RoundlyConsulting\Contacts\Enums\ContactType;
use RoundlyConsulting\Contacts\Facades\Contacts;
use RoundlyConsulting\Contacts\Models\Contact;

it('stores the signup email as a contact', function () {
    $fake = Contacts::fake();

    $user = User::factory()->create();
    $user->addEmail('jane@example.com', label: 'Work');

    $fake->assertAdded(fn ($data) => $data->value === 'jane@example.com');
});

it('requests verification and promotes the email', function () {
    $fake = Contacts::fake();
    $contact = Contact::factory()->email()->create();

    Contacts::verification()->request($contact);   // the fake returns 'fake-token'
    Contacts::setPrimary($contact);

    $fake->assertVerificationRequested($contact);
    $fake->assertPrimarySet($contact);
    $fake->assertNothingAdded();
});

it('replaces the phone list', function () {
    $fake = Contacts::fake();
    $user = User::factory()->create();

    Contacts::for($user)->sync(ContactType::Phone, [
        new ContactData(ContactType::Phone, '+421900000000', isPrimary: true),
    ]);

    $fake->assertSynced(ContactType::Phone, fn (array $items, Model $owner) => count($items) === 1);
    $fake->assertNothingUpdated();
});
```

## Factory

Factory modelu obsahuje stavy na pohodlnú prípravu — email(), phone(), url(), address(), primary(), verified(), pendingVerification(), forOwner($model) a ofType($type). Vytvára model nastavený v contacts.model, takže Contact::factory() aj factory() vašej podtriedy vytvoria váš model aj s jeho castami, udalosťami a observermi:

```php
use RoundlyConsulting\Contacts\Enums\ContactType;
use RoundlyConsulting\Contacts\Models\Contact;

Contact::factory()->email()->primary()->verified()->forOwner($user)->create();
Contact::factory()->phone()->forOwner($user)->create();
Contact::factory()->url()->create();
Contact::factory()->address()->create();
Contact::factory()->ofType(ContactType::Social)->create();

$pending = Contact::factory()->email()->pendingVerification()->create();
$pending->confirmVerification('123456');   // the state stores the hash of '123456'
```

## Pest expectations

Vlastné Pest matchery balíka zaregistrujte v tests/Pest.php vašej aplikácie:

```php
// tests/Pest.php
use RoundlyConsulting\Contacts\Testing\ContactExpectations;

ContactExpectations::register();
```

Potom overujte ľubovoľný model vlastníka. Očakávané hodnoty sa pred porovnaním normalizujú podľa druhu:

```php
use RoundlyConsulting\Contacts\Enums\ContactType;

expect($company)
    ->toHaveContactOfType(ContactType::Email)
    ->toHavePrimaryEmail('hello@example.com')
    ->toHavePrimaryContact(ContactType::Phone, '+421900000000')
    ->toHaveVerifiedContact('hello@example.com');
```

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