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). 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á | Asercia | Asercia, ž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 testPrejavte 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 kryptomienOdoslaní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.