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

V testoch aplikácie nahraďte klienta nahrávacím fake cez Plausible::fake() — bez reálneho HTTP. Vráti PlausibleFake, podtyp PlausibleManager, a nainštaluje ho za fasádu aj do kontajnera, takže sa zaznamená injektovaný PlausibleManager, plausible(), trait Trackable aj middleware plausible.track. Potom overte, čo sa zaznamenalo alebo dotazovalo — na fasáde alebo na vrátenom objekte:

use RoundlyConsulting\Money\Money;
use RoundlyConsulting\Plausible\Facades\Plausible;
use RoundlyConsulting\Plausible\Requests\Events\CaptureEventRequest;

it('tracks the purchase', function () {
    Plausible::fake();

    $this->post('/checkout', [/* ... */]);

    Plausible::assertEventCaptured(
        fn (CaptureEventRequest $event) => $event->name === 'purchase'
            && $event->revenue?->amount->equals(Money::ofMajor('49', 'EUR')) === true,
    );
    Plausible::assertEventCapturedCount(1);
});

it('reads the dashboard numbers', function () {
    Plausible::fake();

    $this->get('/admin/dashboard')->assertOk();

    Plausible::assertQueried(fn ($request, string $type) => $type === 'aggregate');
});

Nahráva sa aj správa webov. Vytvorenie a zmazanie webu a zmazanie cieľa nič neodošlú a odpovedia pripravenými typovanými výsledkami:

it('provisions analytics for a new tenant', function () {
    Plausible::fake();

    $this->post('/tenants', ['domain' => 'new-tenant.com']);

    Plausible::assertSiteCreated('new-tenant.com');
    Plausible::assertGoalCreated('new-tenant.com');
    Plausible::assertSharedLinkCreated('new-tenant.com');
    Plausible::assertNothingCaptured();
});

it('offboards a tenant', function () {
    $fake = Plausible::fake();   // PlausibleFake — asserts work on the handle too

    $this->delete('/tenants/old-tenant.com');

    $fake->assertSiteDeleted('old-tenant.com');
    $fake->assertGoalDeleted('old-tenant.com', 42);
    $fake->assertSiteNotUpdated();
});

Asercie

AserciaPrejde, keď
assertEventCaptured(?callable)Bola zaznamenaná akákoľvek udalosť, prípadne udalosť vyhovujúca callbacku.
assertEventNotCaptured(?callable)Nebola zaznamenaná žiadna udalosť, prípadne žiadna nevyhovuje callbacku.
assertNothingCaptured()Nebola zaznamenaná vôbec žiadna udalosť.
assertEventCapturedCount(int)Bol zaznamenaný presne daný počet udalostí.
assertQueried(?callable)Prebehol akýkoľvek dotaz na štatistiky, prípadne dotaz vyhovujúci fn ($request, string $type).
assertNothingQueried()Neprebehol žiadny dotaz na štatistiky.
assertSiteCreated(?string)Bol vytvorený akýkoľvek web, prípadne web s danou doménou.
assertSiteNotCreated(?string)Nebol vytvorený žiadny web, prípadne web s danou doménou.
assertSiteUpdated(string)Bol upravený web s danou aktuálnou doménou.
assertSiteNotUpdated(?string)Nebol upravený žiadny web, prípadne daný web.
assertSiteDeleted(string)Daný web bol zmazaný.
assertSiteNotDeleted(?string)Nebol zmazaný žiadny web, prípadne daný web.
assertGoalCreated(?string)Bol vytvorený akýkoľvek cieľ, prípadne cieľ pre daný web.
assertGoalNotCreated(?string)Nebol vytvorený žiadny cieľ, prípadne žiadny pre daný web.
assertGoalDeleted(string, int|string)Daný cieľ bol z daného webu zmazaný.
assertGoalNotDeleted(?string, int|string|null)Nebol zmazaný žiadny cieľ zodpovedajúci webu a id — oba sú voliteľné.
assertSharedLinkCreated(?string)Bol vytvorený akýkoľvek zdieľaný odkaz, prípadne odkaz pre daný web.
assertSharedLinkNotCreated(?string)Nebol vytvorený žiadny zdieľaný odkaz, prípadne žiadny pre daný web.

Každá pozitívna asercia má negatívne dvojča:

Plausible::assertEventNotCaptured(fn (CaptureEventRequest $event) => $event->name === 'refund');
Plausible::assertNothingCaptured();
Plausible::assertNothingQueried();
Plausible::assertSiteNotCreated('staging.my-site.com');
Plausible::assertSiteNotDeleted();          // no site deleted at all
Plausible::assertSiteNotUpdated('my-site.com');
Plausible::assertGoalNotCreated();
Plausible::assertGoalNotDeleted('my-site.com');   // site and goal id are both optional
Plausible::assertSharedLinkNotCreated();

Ako sa fake správa

  • Iba zaznamenáva — do Plausible sa nedostane nič. HTTP pre nakonfigurovanú url je podvrhnuté (prázdne url či key doplní testovacími hodnotami) a každé volanie dostane prázdny výsledok, takže štatistiky vrátia nulové metriky a žiadne riadky.
  • captureQueued() udalosť zaznamená namiesto odoslania úlohy, worker fronty teda netreba — rovnako ako skutočný klient však vyžaduje návštevníka (setVisitor() alebo fromRequest()), takže test neprejde pre kód, ktorý by v produkcii zlyhal.
  • Middleware aj trait Trackable získavajú klienta cez plausible(), takže sa zaznamenajú aj ich udalosti.
  • Callback v assertQueried() dostane objekt požiadavky a jej typ: realtime, aggregate, timeseries, breakdown alebo query.

Overovanie fronty

Bez fake overíte udalosti vo fronte cez Queue::fake() z Laravelu — CaptureEventJob sprístupňuje request, userAgent a ipAddress:

use Illuminate\Support\Facades\Queue;
use RoundlyConsulting\Plausible\Jobs\CaptureEventJob;

it('queues an Order Placed event', function () {
    config()->set('plausible.site', 'my-site.com');
    Queue::fake();

    Order::create(['total' => 99]);

    Queue::assertPushed(
        CaptureEventJob::class,
        fn (CaptureEventJob $job) => $job->request->name === 'Order Placed'
            && $job->request->site === 'my-site.com',
    );
});

Vlastné testy balíka spustíte príkazom:

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.