Testovanie
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
| Asercia | Prejde, 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 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.