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

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:

AserciaPrejde, 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 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.