Unit Test Yazma: Jest ile JavaScript Örnekleri ve İyi Uygulamalar
Yazılım Test ve Hata Ayıklama
Unit Test Yazma: Jest ile JavaScript Örnekleri ve İyi Uygulamalar

Giriş: Neden Birim Test Yazmalısınız?
Birim testleri (unit tests), uygulamanızın küçük birimlerinin (fonksiyonlar, utility'ler, bileşenler) beklenen davranışı sürdürdüğünü doğrular. İyi yazılmış testler hataların erken yakalanmasını, refaktoring sırasında güveni ve geliştirme döngüsünü hızlandırır. Bu rehberde Jest çerçevesi kullanılarak gerçekçi örnekler ve uygulanabilir en iyi uygulamalar gösterilecektir.
Jest Nedir ve Hangi Özellikleri Sunar?
Jest, Facebook tarafından geliştirilen, JavaScript ekosisteminde yaygın kullanılan bir test çerçevesidir. Pek çok proje için sıfır yapılandırma ile çalışabilmesi, React ile yakın entegrasyonu ve kapsamlı hata raporları sayesinde tercih edilmektedir (Kaynak: SitePoint / turn0search0). Jest ayrıca snapshot testi, entegre kod kapsamı (coverage) raporları ve test paralelleştirme gibi özellikler sunar (Kaynak: PractiTest / turn0search8; LogRocket / turn0search9).
Hızlı Başlangıç: Projeye Jest Ekleme
Yeni bir Node/JavaScript projesine Jest eklemek genellikle birkaç adımdan ibarettir. Aşağıdaki örnekler, en temel kurulum içindir:
npm init -y
npm install --save-dev jest
package.json içine test script'i ekleyin:
"scripts": {"test": "jest"}
Artık npm test ile testleri çalıştırabilirsiniz. Projenizin yapılandırma gereksinimleri varsa ek opsiyonlar veya Babel/TypeScript entegrasyonu gerekli olabilir; genel olarak Jest birçok durumda ek yapılandırma gerektirmez (Kaynak: SitePoint / turn0search0).
İlk Birim Testiniz: Basit Örnek
Aşağıda, küçük bir sum fonksiyonu ve ona ilişkin bir test örneği var.
// sum.js
function sum(a, b) {
return a + b;
}
module.exports = sum
// sum.test.js
const sum = require('./sum');
test('1 + 2 equals 3', () => {
expect(sum(1, 2)).toBe(3);
});
Dosya adı olarak *.test.js veya *.spec.js kullanabilir veya __tests__ klasörü tercih edebilirsiniz. Jest bu konvansiyonları otomatik olarak algılar.
Asenkron Testler ve Mock'lar
Gerçek dünya uygulamalarında API çağrıları veya zaman uyumsuz (async) işlemler sık kullanılır. Jest, async/await ile doğal çalışır ve ayrıca mock fonksiyonlarıyla dış bağımlılıkları izole etmenizi sağlar.
Basit bir async örnek:
// fetchData.js (örnek)
function fetchData() {
return Promise.resolve('peanut butter');
}
module.exports = fetchData
// fetchData.test.js
const fetchData = require('./fetchData');
test('fetches data asynchronously', async () => {
const data = await fetchData();
expect(data).toBe('peanut butter');
});
Mock kullanımına kısa örnek (jest.fn()):
const myMock = jest.fn().mockReturnValue(42);
expect(myMock()).toBe(42);
Dış modülleri taklit etmek için jest.mock('module-name') kullanılabilir; bu, testlerin deterministik olmasını sağlar ve gerçek ağ çağrılarını önler.
React ile Snapshot Testleri
Jest'in snapshot özelliği, UI bileşenlerinin beklenen çıktısını zaman içinde korumaya yardımcı olur. Snapshot testleri, bileşenin render sonucunu kaydeder ve sonraki çalıştırmalarda değişiklikleri bildirir. Snapshot'lar özellikle React bileşenleri için yaygın kullanılır (Kaynak: PractiTest / turn0search8; React entegrasyonu hakkında daha fazla örnek için SitePoint / turn0search0).
Örnek (react-test-renderer gerektirir):
// MyComponent.test.js
const renderer = require('react-test-renderer');
const React = require('react');
const MyComponent = require('./MyComponent');
test('MyComponent snapshot', () => {
const tree = renderer.create().toJSON();
expect(tree).toMatchSnapshot();
});
Snapshot'lar güçlü bir araçtır, ancak büyük snapshot'lar ve sık değişen markup'lar için dikkatli kullanılmalıdır; gereksiz snapshot güncellemeleri testlerin güvenilirliğini azaltabilir.
Test Coverage (Kapsam) Nasıl Kullanılır?
Jest, entegre olarak kod kapsamı raporları üretir. Kapsam raporları hangi dosyaların test edildiğini, hangi satırların atlandığını gösterir. Hızlı bir coverage çalıştırması:
npx jest --coverage
Raporlar HTML olarak oluşturulur ve hangi fonksiyonların veya satırların eksik test edildiğini görmenizi sağlar. Yüksek kapsam oranı hedeflenebilir, fakat kapsam oranına takılmadan önemli davranışları test etmeye odaklanmak en pratiktir.
Performans: Paralel Test Çalıştırma
Jest testleri varsayılan olarak paralel çalıştırarak performans sağlar; bu, büyük test kümelerinde toplam süreyi kısaltır. Debug veya sıra dışı durumlarda --runInBand ile seri çalıştırma seçeneği kullanılabilir. Paralelleştirme ve performans karşılaştırmaları hakkında örnekler ve değerlendirmeler için LogRocket'in analizine bakabilirsiniz (Kaynak: LogRocket / turn0search9).
Dosya ve Test Yapısı Önerileri
- Testleri küçük ve bağımsız tutun; her test tek bir davranışı doğrulasın.
- Test isimlendirmesi açıklayıcı olsun: should veya returns ifadeleri yerine beklenen davranışı yazın.
- Setup/teardown için
beforeEach/afterEachkullanın; tekrar eden yapılandırmaları paylaşın. - Harici servisleri mock'layın; testleri ağdan izole edin.
- Snapshot'ları sadece bileşenlerin kritik görünüm noktalarında kullanın; davranış testlerini unutmayın.
PR/Merge Öncesi Kontrol Listesi
- Yeni kod için yeterli test eklendi mi?
- Mevcut kapsam belirgin şekilde azaldı mı? (Küçük düşüşler olabilir, ancak önemli düşüşler incelenmeli.)
- Tüm testler yerel ve CI ortamında geçiyor mu?
- Testler deterministik mi (rastgele başarısızlık yok)?
- Harici bağımlılıklar mocklandı mı?
Kaynaklar ve İleri Okuma
- Top React Testing Libraries — SitePoint (Jest'in React entegrasyonu ve avantajları) — turn0search0
- Comparing the best Node.js unit testing frameworks — LogRocket (paralel test çalıştırma ve performans) — turn0search9
- 16 Best Unit Testing Tools for 2026 — PractiTest (snapshot ve kapsam özellikleri) — turn0search8