🇷🇺 Русский · 🇬🇧 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