testing Öne Çıkan
9500 yıldız

Pest PHP

Geliştirici: Nuno Maduro

Zarif ve okunabilir sözdizimi ile test yazmayı keyifli hale getiren modern PHP ve Laravel test framework'ü.

Kurulum

Composer
composer require pestphp/pest

Dokümantasyon & Kullanım

Markdown

Pest 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() ve it() 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