Pest ile PHP’de Test Yazımı
Bu yazıda, henüz PHPUnit kadar yaygın olmasa da son zamanlarda adını sıklıkla duyduğumuz PHP için bir test framework’ü olan Pest üzerine konuşacağız.
Pest aslında PHPUnit üzerine kurulmuştur. Pest daha okunabilir ve sade bir syntax ile test yazmaya olanak sağlamaktır.
Pest’i projemize kurmak için öncelikle aşağıdaki composer komutunu çalıştırmalıyız. Bu komut vendor içine pest ve diğer bağımlılıklarını ekler.
composer require pestphp/pest --dev --with-all-dependencies
Ardından projemiz içinde pest ile ilgili klasör ve dosyaları oluşturmak için aşağıdaki komutu çalıştırmalıyız. Bu komutu çalıştırdığımızda bir tests klasörü ve içinde örnek testlerin oluştuğunu göreceğiz.
./vendor/bin/pest --init
Artık test yazmaya hazırız. Bizim için oluşturulan örnek testler üzerinden incelemeye başlayalım.
test('example', function () {
expect(true)->toBeTrue();
});
Bu kodda example isimli bir test oluşturulmuş ve expect içindeki değerin true olup olmadığı toBeTrue fonksiyonuyla kontrol edilmiştir. expect içinde true değeri olduğundan bu test başarılı bir şekilde geçecektir. Testleri çalıştırmak için aşağıdaki komutu kullanabiliriz.
./vendor/bin/pest
Bu komut ile testleri çalıştırdığımızda çıktımız görseldeki gibi olacaktır.
Pest üzerinde fonksiyonları zincirleme kullanarak hem anlaşılır hem de kapsamlı testler yazabiliyoruz. Ayrıca her adım için ayrı mesajlar tanımlayabiliriz. Aşağıdaki örneğe göz atalım.
test('sum', function () {
expect(Sum(5,5))
->not()->toBeString("Sum can't be a string")
->not()->toBeNull("Sum can't be null")
->toBeInt("Sum should be an integer")
->toBe(10, "Sum should be equal to 10");
});
function Sum(int ...$numbers): int{
return array_sum($numbers);
}
Sum isimli bir fonksiyon tanımladık ve bunun doğruluğunu kontrol etmek için sum isimli bir test oluşturduk.
expect(Sum(5,5))
ifadesi, Sum
fonksiyonunun 5 ve 5 sayılarının toplamasını ve sonucun beklentileri karşılayıp karşılamadığını değerlendirmek için kullanılır.
not()
metodu, sonraki gelen koşulun tersinin doğrulanmasını sağlar. Bu durumda, toplama işleminin sonucunun bir string veya null
olmaması beklenir.
toBeInt(): Bu metot, toplama sonucunun bir tam sayı (integer
) olmasını bekler.
toBe(10): Bu metot, toplama işleminin sonucunun 10 olması gerektiğini doğrular.
Describe fonksiyonunu kullanarak ortak amaca hizmet eden testleri bir araya toplayabiliriz. Örneğin customer ile ilgili testlerimizi aşağıdaki gibi bir arada toplayabiliriz.
describe("Customer operations", function () {
it("Check customer exist", function () {
$token = generateToken();
$isCustomerExist = customerExist($token);
expect($isCustomerExist)->toBeTrue();
});
it("Get customer info", function (){
$token = generateToken();
$customerInfo = getCustomerInfo($token);
expect($customerInfo)
->toBeArray('Customer info should be an array')
->toHaveKeys(['name', 'phone'], 'Customer info should contain name and phone')
->not()->toBeEmpty('Customer info cannot be empty');
});
});
Bu yazı pest kullanımına giriş niteliğindeydi. Pest ile ilgili daha bir çok özellik ve fonksiyon bulunmaktadır. Bu yazıyı yazarken faydalandığım official dökümana aşağıdan ulaşabilirsiniz. Okuduğunuz için teşekkür ederim.