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

Laravel’da Hızlı EU KDV Doğrulama Kuralı Nasıl Oluşturulur
Reddedilen Laravel PR’den Laravel Arr Genişletmesine: Arr::after Ekleme
CREEM Laravel Paketi Oluşturma: Küresel Ödemeleri Dakikalar İçinde Kabul Etme
MrCatz DataTable (Livewire) ile Dakikalar İçinde Laravel Admin CRUD Oluşturma
Makarna Ödemesi Mantığını Durdur: Faturalama Durum Makinesi
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

Laravel Kuyruk Mimarisi: Üretimde Arka Plan İşlemleri için Cron Görevlerini Kullanmayı Neden Bıraktım
Yazılım
Yapay Zeka Serif Fontları Ele Geçiriyor: Neden Bu Değişim Oluyor?
Genel
Raspberry Pi ile gerçek zamanlı havalimanı takipçisi ‘Skylight’
Donanım
Donanım Meraklıları: Computex 2026, 3. Gün – Taipei’de Sıcaklık Artıyor
Donanım
Kritik Uyarı: 2026 FIFA Dünya Kupası Dolandırıcılıklarına Dikkat!
Siber Güvenlik
Acil! Cisco, SD-WAN’da yamanmamış sıfır gün açığına dikkat çekti
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?