NovinkaZverejnili sme 50+ Laravel balíkov ako open source
Custom AI apps, agents and automation — Roundly ConsultingRoundly
Všetky balíky

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). 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:

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

$fake = Contacts::fake();

$user->addEmail('[email protected]');
$contact->requestVerification();

$fake->assertAdded(fn (ContactData $data, Model $owner) => $data->value === '[email protected]');
$fake->assertVerificationRequested($contact);   // the Contact argument is optional
$fake->assertNothingDeleted();
ZaznamenáAserciaAsercia, že nič
for()->…->add(), for()->add(), trait add*()assertAdded(?Closure(ContactData, Model))assertNothingAdded()
for()->sync()assertSynced(?ContactType, ?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.
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('[email protected]', label: 'Work');

    $fake->assertAdded(fn ($data) => $data->value === '[email protected]');
});

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):

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:

// 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:

use RoundlyConsulting\Contacts\Enums\ContactType;

expect($company)
    ->toHaveContactOfType(ContactType::Email)
    ->toHavePrimaryEmail('[email protected]')
    ->toHavePrimaryContact(ContactType::Phone, '+421900000000')
    ->toHaveVerifiedContact('[email protected]');

Testy samotného balíka

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

Odoslaním daru súhlasíte s našimi podmienkami prijímania darov.

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.