Teknomers | Dünyadan Güncel Teknoloji | Oyun | Müzik | Film | Spor HaberleriTeknomers | Dünyadan Güncel Teknoloji | Oyun | Müzik | Film | Spor HaberleriTeknomers | Dünyadan Güncel Teknoloji | Oyun | Müzik | Film | Spor Haberleri
Yazı Tipi BoyutlandırıcıAa
  • Anasayfa
  • Teknoloji
    • Siber Güvenlik
    • Yapay Zeka
    • Donanım
    • Bilim
  • Yazılım
  • Savunma & İstihbarat
  • Oyun
  • Yaşam
    • Finans
    • Sinema
    • Dünyadan Haberler
  • İş Birliği
Okuma: Karmaşık Testleri Durdur: Laravel Testlerinde Zamanı Dondur
Paylaş
Yazı Tipi BoyutlandırıcıAa
Teknomers | Dünyadan Güncel Teknoloji | Oyun | Müzik | Film | Spor HaberleriTeknomers | Dünyadan Güncel Teknoloji | Oyun | Müzik | Film | Spor Haberleri
Ara
Bizi Takip Et
  • Hakkımızda
  • Gizlilik politikası
  • Tanıtım Yazısı ve Backlink Hizmeti
© 2026 Teknomers. All Rights Reserved.

Anasayfa » Karmaşık Testleri Durdur: Laravel Testlerinde Zamanı Dondur

Yazılım

Karmaşık Testleri Durdur: Laravel Testlerinde Zamanı Dondur

teknomers
Son güncelleme: 10 Ocak 2026 02:43
teknomers
Paylaş
Paylaş

Bir yıl kadar önce, Laravel’in geçici depolama URL’lerini test ederken zamanın dondurulması hakkında bir makale yazmıştım.

Ne oldu biliyor musunuz? Aynı soruna bir kez daha, ama farklı bir açıdan rastladım. Bu, testlerimizde zamanı kontrol etmenin sadece bir iyi niyet durumu değil, zorunlu olduğunu hatırlattı.

Sorun

Testim bilgisayarımdaki gibi düzgün çalışıyordu. Ancak, CI ortamında rastgele olarak başarısız oldu:

public function test_order_item_cancel(): void
{
    $user = UserFixture::createUser();
    $this->actingAsFrontendUser($user);

    $order = OrderFixture::create($user);
    $orderItem = OrderItemFactory::new()->for($order)->for($user)->create();

    $response = $this->put(route('api-v2:order.order-items.cancel', ['uuid' => $orderItem->uuid]));

    $response->assertNoContent();

    $this->assertDatabaseHas(OrderItem::class, [
        'uuid' => $orderItem->uuid,
        'canceled_at' => Date::now(),
    ]);
}
Tam ekran modu

Tam ekrandan çık

Bazen bu hatayı alıyordum:

Failed asserting that a row in the table [order_items] matches the attributes {
    "canceled_at": "2026-01-09T10:24:52.008406Z"
}.

Found: [
    {
        "canceled_at": "2026-01-09 12:24:51"
    }
].
Tam ekran modu

Tam ekrandan çık

Başlangıçta sadece omuz silkip “yeniden denemek” yaptım, herkesin yaptığı gibi. 😅 Ama The Flaky Test Chronicles VI makalesini okuduktan sonra, dikkat etmem gerektiğini fark ettim. Bu gerçek bir hata mıydı yoksa sadece dalgalı bir test mi?

Neden Bu Oluyor?

Problemin oldukça basit: Date::now() iki kez çağrılıyor, ama aynı anda değil.

İlk olarak, kontrolör canceled_at‘i ayarladığı zaman. İkincisi ise, test değeri kontrol ettiğinde.

Hatta çok küçük bir gecikme, belki sadece milisaniye, bu iki zaman damgasını farklı kılabilir. CI genellikle daha yavaş çalıştığı için bu, orada daha sık yaşanır.

Çözüm

Yalnızca isteği yapmadan önce zamanı dondurun:


// Seçenek 1
$this->freezeTime();
// Seçenek 2
$now = Date::now();
Date::setTestNow($now);

$response = $this->put(route('api-v2:order.order-items.cancel', ['uuid' => $orderItem->uuid]));

$this->assertDatabaseHas(OrderItem::class, [
    'uuid' => $orderItem->uuid,
    'canceled_at' => $now,
]);
Tam ekran modu

Tam ekrandan çık

$this->freezeTime() sadece test yaşam döngüsüne özel bir Date::setTestNow() sarmalayıcısıdır.

Artık hem kontrolör hem de test aynı zaman damgasını paylaşıyor. Artık eşleşme sorunu yok.

Başka Bir Yöntem

Eğer tam zaman damgasıyla ilgilenmiyorsanız ve sadece alanın boş olmadığından emin olmak istiyorsanız, şu şekilde devam edebilirsiniz:


$this->assertDatabaseMissing(OrderItem::class, [
    'uuid' => $orderItem->uuid,
    'canceled_at' => null,
]);
Tam ekran modu

Tam ekrandan çık

Son Düşünceler

Eğer testleriniz zamana bağlıysa, ona hakim olun. Testiniz lokal ortamda başarılı olup CI’da başarısız olduğunda, Date::setTestNow() veya $this->freezeTime() kullanarak zamanı dondurun. Testlerinizi güvenilir hale getirin, neyi test ettiğinizi kontrol edin. Doğru yapın. Deterministik tutun. Testlerinize güvenin.

Yazarın Notu

Vakit ayırdığınız için teşekkürler!
Beni dev.to, LinkedIn üzerinden takip edebilir veya GitHub üzerindeki işlerime göz atabilirsiniz.

Gerçek dünyadan Laravel notları.

Kaynak: Orijinal Makale

2026’da Laravel Uygulamaları için Railway Güvenilir mi?
Laravel’da Hızlı EU KDV Doğrulama Kuralı Nasıl Oluşturulur
Ücretsiz, kendi barındırdığım Pusher Alternatifini Geliştirdim
Haitao Geliştirmenin 3 Yaygın Tuzağı
JavaScript Dizilerini Özledim… Bu yüzden Onları PHP ile Yeniden Oluşturdum 🐘
Bu Makaleyi Paylaş
Facebook Bağlantıyı Kopyala Yazdır
Paylaş
Önceki Makale Amazon dizisi ivme kazandıkça, Fallout oyunları için yeni fırsatlar ortaya çıkıyor
Sonraki Makale Endonezya, rızasız cinselleştirilmiş deepfake’leri engelledi

Sanal Medya

FacebookBeğen
452Takip Et
PinterestSabitle
237Takip Et

Son Eklenenler

Tim Sweeney, Steam’in AI etiketlerini sorumsuzca koyduğunu belirtti
Donanım
Gerçek Açık Kaynak Katkılarım Beni Mutlu Etti
Yazılım
Dota 2’deki Axe Karakteri Şaşırtan Bir Değişim Geçirdi
Oyun
Genel Intuition 2.3 Milyar Dolarlık Yatırımla Video Oyunlarından Gerçek Dünyaya Geçiş Yapıyor
Genel
Xbox Fiyatları Yükselişe Geçti: 100 Dolar Artış!
Liste
Kritik: Yeni macOS zararlısı, AI analiz araçlarını kandırıyor!
Siber Güvenlik
//

Siber güvenlik, yapay zeka ve savunma sanayiinden; finans ve sinema dünyasına uzanan geniş bir yelpaze. Teknomers; teknoloji, strateji ve yazılım dünyasını sade bir dille sizlerle buluşturuyor.

Kurumsal

  • Hakkımızda
  • Gizlilik politikası
  • Tanıtım Yazısı ve Backlink Hizmeti

Kategoriler

  • Teknoloji
  • Oyun
  • Sinema
  • Siber Güvenlik
  • Bilim
  • Finans
  • Dünyadan Güncel Haberler

Populer

  • TV'de Ücretsiz İzlenebilen Şifresiz Erotik Kanallar (2025 Güncel Frekans Listesi)

  • The Last of Us PC Kontrolleri: Hızlı Silah Değiştirme ve Tüm Tuşlar (2025)

  • Hogwarts Legacy'de Odaklanma İksiri Nasıl Yapılır?

Teknomers | Dünyadan Güncel Teknoloji | Oyun | Müzik | Film | Spor HaberleriTeknomers | Dünyadan Güncel Teknoloji | Oyun | Müzik | Film | Spor Haberleri
Bizi Takip Et
© 2026 Teknomers. All Rights Reserved.
Welcome Back!

Sign in to your account

Kullanıcı Adı veya E-posta Adresi
Şifre

Şifrenizi mi unuttunuz?