Kaynaklarımızı kurduğumuza göre, bunların beklendiği gibi çalıştığından emin olmanın zamanı geldi. Bu derste BankAccount, Budget ve Category kaynakları için özellik testleri yazacağız. Özellikle kullanıcıların yalnızca kendi verilerini görebildiklerine odaklanacağız.
Pest Kurulumu
Pest Kurulumu
Öncelikle, projemize Pest eklememiz gerekiyor. Pest, basitlik ve şıklık üzerine odaklanmış bir test çerçevesidir.
composer require pestphp/pest --dev --with-all-dependencies
php artisan pest:install
Ayrıca, User modelimizin Filament testleri için hazır olduğundan emin olmalıyız. Testlerimizde bir Filament kullanıcısını doğru bir şekilde simüle edebilmek için User modelimizin FilamentUser sözleşmesini uygulaması gerekmektedir. Bu, actingAs kullandığımızda kullanıcının panel erişimine doğru bir şekilde sahip olmasını sağlar.
app/Models/User.php dosyasını güncelleyin:
use Filament\Models\Contracts\FilamentUser;
// ...
class User extends Authenticatable implements FilamentUser
{
// ...
public function canAccessPanel(\Filament\Panel $panel): bool
{
return true;
}
}
Kurulum ve model değişikliklerini bu commit’ten görüntüleyebilirsiniz.
Banka Hesabı Kaynağını Test Etme
Banka Hesabı Kaynağını Test Etme
BankAccountResource ile başlayalım. Aşağıdaki doğrulamaları yapmalıyız:
- Sayfayı render etmek.
- Kullanıcıya ait banka hesaplarını listelemek.
- Diğer kullanıcıların banka hesaplarını listelememek.
- Hesap oluşturmak, düzenlemek ve silmek.
Yeni bir test dosyası oluşturun: tests/Feature/Filament/Resources/BankAccountResourceTest.php.
Render Etme ve Listeleme
Render Etme ve Listeleme
Önce kullanıcının oturum açması için actingAs($user) kullanıyoruz ve ardından sayfa URL’sine erişiyoruz.
use App\Filament\Resources\BankAccounts\Pages\ManageBankAccounts;
use App\Models\BankAccount;
use App\Models\User;
use Livewire\Livewire;
use function Pest\Laravel\actingAs;
it('can render page', function () {
$user = User::factory()->create();
actingAs($user)
->get(ManageBankAccounts::getUrl())
->assertSuccessful();
});
it('can list bank accounts', function () {
$user = User::factory()->create();
$bankAccount = BankAccount::factory()->for($user)->create();
Livewire::actingAs($user)
->test(ManageBankAccounts::class)
->assertCanSeeTableRecords([$bankAccount]);
});
Kapsam Testi (Diğer Kullanıcı Testi)
Kapsam Testi (Diğer Kullanıcı Testi)
Bu kritik bir testtir. Bir kullanıcı ve başka bir kullanıcı oluşturarak mevcut kullanıcının diğer kullanıcının kaydını görmemesini bekliyoruz.
it('cannot see other users bank accounts', function () {
$user = User::factory()->create();
$otherUser = User::factory()->create();
$otherBankAccount = BankAccount::factory()->for($otherUser)->create();
Livewire::actingAs($user)
->test(ManageBankAccounts::class)
->assertCanNotSeeTableRecords([$otherBankAccount]);
});
Eylemler: Oluştur, Düzenle, Sil
Eylemler: Oluştur, Düzenle, Sil
Filament, eylemleri doğrudan test etmek için mükemmel yardımcılar sağlar.
it('can create bank account', function () {
$user = User::factory()->create();
Livewire::actingAs($user)
->test(ManageBankAccounts::class)
->mountAction('create')
->setActionData([
'name' => 'My Main Bank',
'balance' => '1000.50',
])
->callMountedAction()
->assertHasNoActionErrors();
assertDatabaseHas('bank_accounts', [
'user_id' => $user->id,
'name' => 'My Main Bank',
'balance' => 100050, // Değer, Caster sayesinde tam sayı olarak
]);
});
Veritabanında 100050 değerinin olduğuna dair bir doğrulama görmek önemlidir, çünkü para işlemlerini tam sayılar olarak yönetiyoruz!
Banka Hesabı kaynağı için tam test kütüğünü bu commit’ten inceleyebilirsiniz.
Bütçe ve Kategori Kaynakları
Bütçe ve Kategori Kaynakları
BudgetResource ve CategoryResource testleri de aynı şekilde ilerliyor. Özellikle detaylı eylemlerin (oluşturma ve düzenleme gibi) çalıştığından emin olmamız gerekir; ancak en önemlisi, kapsam kurallarını doğrulamaktır.
Örneğin, kategori testleri, bir kullanıcının yalnızca kendi kategorilerini düzenleyebilmesini sağlamalıdır.
Uygulamanın detaylarına Bütçe kaynağı testleri için ve Kategori kaynağı testleri için göz atabilirsiniz.
Testlerin Çalıştırılması
Testlerin Çalıştırılması
Son olarak, test kütüğümüzü çalıştırarak her şeyin uygun şekilde çalıştığını görmek için:
php artisan test
Tüm kaynak testlerinin geçtiğini doğrulayan bir çıktı görmelisiniz:
PASS Tests\Feature\Filament\Resources\BankAccountResourceTest
✓ it can render page
✓ it can list bank accounts
✓ it cannot see other users bank accounts
...
🎓 Bu Uygulamayı Oluştur ve Ücretsiz Sertifika Al
🎓 Bu Uygulamayı Oluştur ve Ücretsiz Sertifika Al
Bu kılavuzu faydalı bulduysanız, tüm uygulamayı baştan inşa edebileceğiniz ücretsiz bir kurs bulacaksınız.
Öğrenecekleriniz:
- 🏗️ Gelişmiş Laravel Mimarisi
- 📊 FilamentPHP ile Dashboard Oluşturma
- 💰 Parayı kodla profesyonel bir şekilde yönetme
→ Diğer öğrencilerle beraber maiobarbero.dev’de katılın
İyi kodlamalar!
Kaynak: Orijinal Makale


