Testovanie
Metrics::fake() nahradí manažéra — za fasádou aj v kontajneri, takže ho dostanú aj injektovaní manažéri — zaznamenávajúcim RoundlyConsulting\Metrics\Testing\MetricsFake a vráti ho. Ponechá si každú zaregistrovanú metriku, na zadané kľúče odpovie pripravenými výsledkami a zaznamená, čo sa vyhodnotilo a invalidovalo — v duchu Http::fake() z Laravelu. Fake je súčasťou balíka a závisí len od Assert z PHPUnit:
use RoundlyConsulting\Metrics\Facades\Metrics;
$fake = Metrics::fake([
'active-users' => 1200, // a number becomes a value envelope
'revenue' => ['value' => 5000.0], // an array is used as the raw result
]);
// ...exercise the code under test...
Metrics::assertResolved('active-users');
$fake->assertResolvedTimes('active-users', 1);
$fake->assertNotResolved('revenue');
$fake->assertNothingResolved();
// forget() and flushCache() are recorded, and the cache is left alone
$fake->assertForgotten('revenue'); // by key, or by class for an unregistered metric
$fake->assertNotForgotten('active-users');
$fake->assertNothingForgotten();
$fake->assertCacheFlushed();
$fake->assertCacheNotFlushed();Pripravené hodnoty
- int alebo float — zabalí sa do výsledku hodnoty.
- Pole — použije sa ako surový výsledok.
- RoundlyConsulting\Metrics\Types\Result — použije sa bez zmeny.
- Celá inštancia Metric — použije sa jej kópia s vypnutým cachovaním.
Pripravené výsledky sa nikdy necachujú, takže hodnota z jedného testu nepretečie do ďalšieho. Fake si ponechá každú metriku zaregistrovanú pred ním — napríklad v service provideri — takže kľúče bez pripravenej hodnoty sa vyhodnotia zo skutočnej zaregistrovanej metriky; keys(), has() aj all() zahŕňajú aj pripravené kľúče:
use RoundlyConsulting\Metrics\Facades\Metrics;
// AppServiceProvider::boot() registered: Metrics::register('users', RegisteredUsers::class);
$fake = Metrics::fake(['revenue' => 5000]);
Metrics::get('users'); // the real registered metric — kept by the fake, and recorded
Metrics::get('revenue'); // the canned result
$fake->assertResolved('users');
$fake->assertResolved('revenue');Asercie
Dostupné na vrátenom fake objekte aj cez fasádu Metrics:
| Asercia | Prejde, keď |
|---|---|
assertResolved(string $key, ?int $times = null) | Kľúč sa vyhodnotil aspoň raz (alebo presne $times-krát). |
assertResolvedTimes(string $key, int $times) | Kľúč sa vyhodnotil presne $times-krát. |
assertNotResolved(string $key) | Kľúč sa nevyhodnotil ani raz. |
assertNothingResolved() | Nevyhodnotila sa žiadna metrika. |
assertForgotten(string $key) | forget() sa zavolalo pre kľúč — alebo pri nezaregistrovanej inštancii metriky pre jej triedu. |
assertNotForgotten(string $key) | forget() sa preň nikdy nezavolalo. |
assertNothingForgotten() | forget() sa nezavolalo vôbec. |
assertCacheFlushed() | flushCache() sa zavolalo. |
assertCacheNotFlushed() | flushCache() sa nikdy nezavolalo. |
forget() a flushCache() sa zaznamenajú a cache sa nikdy nedotknú; forget() však pri kľúči, ktorý nie je pripravený ani zaregistrovaný, stále vyhodí UnknownMetricException.
Feature test
Fake sa dobre dopĺňa s controllerom zo sekcie Register metrík — zaznamená sa každé načítanie cez get(), vrátane tých, ktoré robí dashboard:
use RoundlyConsulting\Metrics\Facades\Metrics;
it('serves a metric tile', function () {
Metrics::fake(['active-users' => 1200]);
// GET /metrics/{key} — the show() controller from the Registry section
$this->getJson('/metrics/active-users')
->assertOk()
->assertJsonPath('result.value', 1200.0);
Metrics::assertResolvedTimes('active-users', 1);
});Testovanie samotných čísel
Ak chcete testovať samotný výpočet, fake vynechajte: naplňte riadky cez factories a overujte výstup toArray() — metriky bežia nad testovacou databázou ako každý iný dotaz:
use App\Metrics\RegisteredUsers;
use App\Models\User;
use RoundlyConsulting\Metrics\Enums\Period;
it('counts sign-ups today', function () {
User::factory()->count(3)->create();
$metric = RegisteredUsers::make()->range(Period::Today)->toArray();
expect($metric['result']['value'])->toBe(3.0);
});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 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.