Pest PHP
Zarif ve okunabilir sözdizimi ile test yazmayı keyifli hale getiren modern PHP ve Laravel test framework'ü.
Kurulum
Composercomposer require pestphp/pest
Dokümantasyon & Kullanım
MarkdownPest PHP
Pest, PHP ve Laravel ekosistemi için tasarlanmış, okunabilirliği en üst seviyeye çıkaran akıcı (fluent) bir sözdizimine, zengin hata çıktılarına ve benzersiz bir geliştirici deneyimine (DX) sahip modern bir test framework'üdür. PHPUnit üzerine inşa edilmiş olup tüm PHPUnit özelliklerini eksiksiz destekler.
Neden Tercih Edilmeli?
- Zarif ve Sade Sözdizimi: Sınıf (class) ve metot kalıplarından arınmış, doğrudan
test()veit()blokları ile yazılan minimalist testler. - Güçlü Beklenti API'si (Expectations):
expect($value)->toBe(10)->toBeGreaterThan(5)gibi doğal dilde okunabilen zincirleme kontroller. - Laravel Eklentisi (Pest Plugin Laravel):
get(),post(),assertDatabaseHas()gibi Laravel test yardımcılarıyla tam uyumlu. - Mimari Testleri (Arch Testing): Projenizin mimari kurallarını (örn. "Controller'lar doğrudan DB çağırmamalı") test edebilme yeteneği.
- Görsel Test Çıktıları & Paralel Çalıştırma: Hataları renkli ve anlaşılır kod parçacıklarıyla gösterir, testleri paralel çalıştırarak hız kazandırır.
Kurulum
Composer ile Pest ve Laravel eklentisini dev bağımlılığı olarak ekleyin:
composer require pestphp/pest --dev --with-all-dependencies
composer require pestphp/pest-plugin-laravel --dev
Pest ortamını başlatın:
php artisan pest:install
Temel Kullanım
1. Basit Birim (Unit) Testi
test('iki sayının toplamını doğru hesaplar', function () {
$result = 5 + 10;
expect($result)
->toBeInt()
->toBe(15)
->toBeGreaterThan(10);
});
it('boş bir dizi doğrulandığında false döner', function () {
$items = [];
expect($items)->toBeEmpty();
});
2. Laravel Özellik (Feature) Testi
use App\Models\User;
use App\Models\Article;
use function Pest\Laravel\get;
use function Pest\Laravel\actingAs;
use function Pest\Laravel\assertDatabaseHas;
test('ziyaretçiler ana sayfayı görüntüleyebilir', function () {
get(route('home'))
->assertOk()
->assertSee('Laravel');
});
test('giriş yapmış kullanıcı yeni makale oluşturabilir', function () {
$user = User::factory()->create();
actingAs($user)
->post(route('articles.store'), [
'title' => 'Pest ile Test Yazımı',
'content' => 'Pest test yazmayı çok kolaylaştırıyor.',
])
->assertRedirect(route('articles.index'));
assertDatabaseHas('articles', [
'title' => 'Pest ile Test Yazımı',
'user_id' => $user->id,
]);
});
3. Mimari (Architecture) Testleri
Kod kalitesini ve katman kurallarını güvence altına alın:
test('controller sınıfları strict kurallara uymalıdır', function () {
expect('App\Http\Controllers')
->toHaveSuffix('Controller')
->toUseNothing([
'Illuminate\Support\Facades\DB',
]);
});
test('debugging fonksiyonları kodda unutulmamalıdır', function () {
expect(['dd', 'dump', 'ray', 'var_dump'])
->not->toBeUsed();
});
Testleri Çalıştırma
# Tüm testleri çalıştır
php artisan test
# Filtre ile çalıştırma
./vendor/bin/pest --filter="makale"
# Paralel çalıştırma
./vendor/bin/pest --parallel
Paket Bilgileri
Diğer Paketler
TALL stack üzerine kurulu, zarif ve son derece genişletilebilir admin paneli ve CRUD yönetim aracı.
API oluşturmadan Vue, React veya Svelte bileşenlerini klasik Laravel controller ve view yapısıyla SPA olarak çalıştırmayı sağlayan adaptör.
PHP ve Laravel için popüler, güçlü, esnek görsel işleme, kırpma, filtreleme ve optimizasyon kütüphanesi.