CloudCastle Clock

🇷🇺 Русский · 🇬🇧 English · 🇩🇪 Deutsch · 🇫🇷 Français · 🇪🇸 Español · 🇮🇹 Italiano

Примеры

Retry с виртуальным сном

$clock = MockClock::from('2026-01-01 00:00:00', 'UTC');
$attempts = 0;

while ($attempts < 5) {
    if ($api->try()) {
        break;
    }

    ++$attempts;
    $clock->sleep(2 ** $attempts);   // мгновенно в тесте
}

Ключ кэша по минутам

$byMinute = TruncatingClock::toMinute(SystemClock::utc());
$key = 'rates:' . $byMinute->timestamp();

Серия событий в тесте

$clock = StepClock::from('2026-01-01 00:00:00', TimeSpan::ofMinutes(5), 'UTC');

foreach ($batch as $message) {
    $log->record($message, $clock->now());   // 00:00, 00:05, 00:10...
}

Замер этапов

$watch = Stopwatch::start();
$loader->import();
$watch->lap('импорт');
$indexer->rebuild();
$watch->lap('индексация');
$metrics->timing('job.total', $watch->stop());

Скоуп-подмена времени

$report = ClockHolder::within(
    FrozenClock::from('2026-03-31 23:59:59', 'UTC'),
    fn () => $builder->quarterReport(),
);

🇷🇺 Русский · 🇬🇧 English · 🇩🇪 Deutsch · 🇫🇷 Français · 🇪🇸 Español · 🇮🇹 Italiano