Laravel uygulamaları geliştiriyorsanız, testlerin en iyi güvenlik ağı olduğunu zaten biliyorsunuz. Ancak, geleneksel testler, gerekli olan boilerplate kod miktarı nedeniyle genellikle “ağır” hissedilebilir.
Pest, daha temiz ve daha ifadeli bir sözdizimi sunan, PHPUnit üzerine inşa edilmiş bir test çerçevesidir. Bu sayede, hala PHPUnit’i kullanılabilir kılarak daha “sözlü dil” ile yazılmış testler yazmanıza olanak tanır.
Bu makalede şunları ele alacağız:
- Pest nedir (ve neden Laravel geliştiricileri onu sever),
- Bir Laravel projesinde nasıl kurulacağı,
- Yaygın test türleri nasıl yazılır,
- Ve PHPUnit’ten geçiş yaklaşımı.
Neden Laravel Geliştiricileri Pest’i Seviyor
Neden Laravel Geliştiricileri Pest’i Seviyor
Pest, “Daha az boilerplate, daha çok niyet” fikri etrafında tasarlanmıştır. Uzun sınıf dosyaları oluşturmak yerine, basit it() veya test() blokları yazarsınız.
Ana Faydaları:
Ana Faydaları:
- Okunabilirlik: Yapıya göre davranışa odaklanırsınız (“X’i yapar”).
- Minimalizm: Küçük testler için sınıf sarıcıları gerekmez.
- Modern Yardımcılar: Veri setleri, akıcı beklentiler ve temiz gruplama gibi güçlü araçlar içerir.
- Kolay Benimseme: PHPUnit üzerinde çalıştığı için mevcut setinizi kademeli olarak taşıyabilirsiniz.
Uzun test sınıfları oluşturmak yerine, basit it() veya test() blokları yazıyorsunuz.
Örnek:
it(, function () {
$this->get()->assertOk();
});
Neden Laravel’de Pest Kullanmalısınız?
Neden Laravel’de Pest Kullanmalısınız?
✅ 1) Testler daha iyi okunuyor
✅ 1) Testler daha iyi okunuyor
Yapıya değil, davranışa odaklanıyorsunuz (“X’i yapar”).
✅ 2) Daha az boilerplate
✅ 2) Daha az boilerplate
Küçük testler için sınıf dosyalarına ve tekrar eden yöntem imzalarına gerek yok.
✅ 3) Modern yardımcılar
✅ 3) Modern yardımcılar
Veri setleri, beklentiler, eklentiler ve temiz gruplama imkanı sağlar.
✅ 4) Kolay benimseme
✅ 4) Kolay benimseme
Çünkü Pest, PHPUnit üzerinde çalışır; bu nedenle, kademeli olarak geçiş yapabilirsiniz.
Laravel’de Pest Kurulumu
Laravel’de Pest Kurulumu
composer require pestphp/pest --dev
composer require pestphp/pest-plugin-laravel --dev
php artisan pest:install
Testleri çalıştır:
php artisan test
# veya
./vendor/bin/pest
İlk Testlerinizi Yazın
İlk Testlerinizi Yazın
İlk Laravel HTTP Testiniz (Pest)
İlk Laravel HTTP Testiniz (Pest)
it(, function () {
$this->get()
->assertOk()
->assertSee();
});
Testleri Gruplama
Testleri Gruplama
it(, function () {
$this->get()->assertRedirect();
})->group();
Sadece o grubu çalıştır:
./vendor/bin/pest --group=auth
Fabrikalar ile Veritabanı Testi
Fabrikalar ile Veritabanı Testi
Pest, Laravel’in RefreshDatabase trait’i ile iyi çalışır.
use Illuminate\Foundation\Testing\RefreshDatabase;
use App\Models\User;
uses(RefreshDatabase::class);
it(, function () {
$user = User::factory()->create();
expect($user)->toBeInstanceOf(User::class);
$this->assertDatabaseHas(, [=> $user->id]);
});
Beklenti Tarzı (Temiz İfadeler)
Beklenti Tarzı (Temiz İfadeler)
Pest, okunan akışta expect() formları ile test yazmayı teşvik eder:
it(, function () {
$email = ;
expect($email)
->toContain()
->toEndWith();
});
İsterseniz klasik PHPUnit ifadelerini de kullanabilirsiniz.
Veri Setleri: Bir Test, Birden Fazla Girdi
Veri Setleri: Bir Test, Birden Fazla Girdi
Veri setleri doğrulama kuralları, kenar durumları ve formatlama mantığı için harikadır.
it(, function ($email) {
$this->post(, [
=> ,
=> $email,
=> ,
=> ,
])->assertSessionHasErrors();
})->with([
=> [],
=> [],
=> [],
]);
Laravel Fakes (mail / kuyruk) ile Pest
Laravel Fakes (mail / kuyruk) ile Pest
Laravel, yan etkileri test etmeyi kolaylaştıran “fakes” sunar.
Mail Fake
Mail Fake
use Illuminate\Support\Facades\Mail;
use App\Mail\WelcomeMail;
it(, function () {
Mail::fake();
// burada mantığınızı tetikleyin...
// $this->post('/register', [...])
Mail::assertSent(WelcomeMail::class);
});
Kuyruk Fake
Kuyruk Fake
use Illuminate\Support\Facades\Queue;
use App\Jobs\ProcessInvoice;
it(, function () {
Queue::fake();
// burada mantığınızı tetikleyin...
Queue::assertPushed(ProcessInvoice::class);
});
PHPUnit’ten Pest’e Taşınma (Pratik Yaklaşım)
PHPUnit’ten Pest’e Taşınma (Pratik Yaklaşım)
Her şeyi bir anda yeniden yazmak zorunda değilsiniz.
Adım 1: Pest’i Kurun
Adım 1: Pest’i Kurun
Mevcut PHPUnit testlerinizi koruyun. Her şey hala çalışıyor.
Adım 2: Yeni Testleri Pest Tarzında Yazın
Adım 2: Yeni Testleri Pest Tarzında Yazın
Yeni testleri tests/Feature veya tests/Unit klasörüne it() blokları olarak ekleyin.
Adım 3: Kademeli Olarak Dönüştürün
Adım 3: Kademeli Olarak Dönüştürün
En sık dokunduğunuz testleri veya tekrar eden boilerplate olanları dönüştürün.
PHPUnit (önce)
PHPUnit (önce)
class HomepageTest extends TestCase
{
public function test_homepage_is_ok(): void
{
$this->get()->assertOk();
}
}
Pest (sonra)
Pest (sonra)
it(, function () {
$this->get()->assertOk();
});
Aynı hareket, daha az gürültü.
Önemli En İyi Uygulamalar (Pest veya PHPUnit ile)
Önemli En İyi Uygulamalar (Pest veya PHPUnit ile)
- Önemli iş akışları (kimlik doğrulama, ödeme, CRUD) için özellik testleri tercih edin.
- Pür mantık (formatlayıcılar, değer nesneleri, küçük hizmetler) için birim testleri kullanın.
- Testleri belirleyici tutun: dış çağrıları sahteleyin.
- Laravel iç yapısını test etmeyin—davranışınızı test edin.
Hızlı Kontrol Listesi
Hızlı Kontrol Listesi
- [ ] Pest + Laravel eklentisini kurun
- [ ] PHPUnit testlerini koruyun (büyük bir geçiş yapmaya gerek yok)
- [ ] Yeni testleri Pest tarzında yazın
- [ ] Kenar durumları için veri setlerini kullanın
- [ ] Yan etkileri önlemek için Mail/Kuyruk/Etkileri sahteleştirin
- [ ] Eski testleri kademeli olarak dönüştürün
Sonuç
Sonuç
Pest, PHPUnit’in yerine geçmez—PHPUnit’i daha yazım açısından hoş hale getirir.
Test yazmaktan kaçındıysanız çünkü fazla sesli geldi, Pest bu friksiyonu azaltmak için harika bir yol:
- daha az boilerplate,
- daha okunabilir testler,
- aynı güvenilirlik.
Bunu bir özellik testinde deneyin ve nasıl hızla varsayılan haline geldiğine tanık olun.
Kaynak: Orijinal Makale
- Neden Laravel Geliştiricileri Pest’i Seviyor
- Neden Laravel’de Pest Kullanmalısınız?
- Laravel’de Pest Kurulumu
- İlk Testlerinizi Yazın
- İlk Laravel HTTP Testiniz (Pest)
- Fabrikalar ile Veritabanı Testi
- Beklenti Tarzı (Temiz İfadeler)
- Veri Setleri: Bir Test, Birden Fazla Girdi
- Laravel Fakes (mail / kuyruk) ile Pest
- PHPUnit’ten Pest’e Taşınma (Pratik Yaklaşım)
- Adım 1: Pest’i Kurun
- Adım 2: Yeni Testleri Pest Tarzında Yazın
- Adım 3: Kademeli Olarak Dönüştürün
- PHPUnit (önce)
- Pest (sonra)
- Önemli En İyi Uygulamalar (Pest veya PHPUnit ile)
- Hızlı Kontrol Listesi
- Sonuç


