Kurulum ve yapılandırma yükü
Jest'i TypeScript veya modern ESM ile çalıştırmaya karar verdiğinde tek bir npm install jest yetmiyor: babel-jest + @babel/preset-env (ya da ts-jest) kurmalı ve ayrı bir babel.config.js yazmalısın — bu, jestjs.io'nun kendi kurulum dokümantasyonunda açıkça belirtiliyor. Vitest tarafında bu ek transform katmanı yok, çünkü Vitest zaten Vite'ın kendi transform pipeline'ını kullanıyor.
Vitest 5'te dikkat etmen gereken bir değişiklik var: vite artık Vitest'in doğrudan bağımlılığı değil, peer dependency. npm, pnpm veya Bun kullanıyorsan sorun yok, otomatik kurulur; ama Yarn kullanıyorsan yükseltme sonrası vite'ı elle eklemezsen paket çözülemez — resmi migration guide bunu net bir uyarı olarak veriyor.
Node sürüm gereksinimleri de farklı ve burada ayrıntıya dikkat etmelisin: Vitest'in npm engines alanı ^22.12.0 || ^24.0.0 || >=26.0.0 diyor — yani yalnız "22.12 ve üstü" değil, 23.x ve 25.x gibi ara sürümler de dışarıda. Jest ise ^18.14, ^20, ^22 veya ≥24 ile daha geniş bir aralığı destekliyor. Eski ya da tek sayılı bir Node sürümüne sabitlenmiş CI'ın varsa bu tek başına belirleyici olabilir.
Vite config paylaşımı ve watch-mode hızı
Vitest'in temel değer önerisi tek cümleyle özetlenir: uygulamanla aynı vite.config.js'i ve aynı transform boru hattını kullanan bir test runner. Geliştirme sunucusundaki alias'lar, plugin'ler ve ortam değişkenleri testte de birebir aynı davranır. Jest'in kendi resolve/transform katmanı var; Vite tabanlı bir projede iki ayrı yapılandırmayı senkron tutman gerekir.
Hız tarafında iki ekip de kendi rakamını yayımlıyor. Vitest 5 blogu vitest-dev/benchmarks deposuyla (Apple M4, Node 24, 3 koşu medyanı) 4.1→5.0 farkını veriyor: enterprise-monolith (1.280 modül, forks-isolated) 7,24 sn→5,83 sn (%19), deps-heavy vmThreads 1,59 sn→0,74 sn (%53), long-haul 5,43 sn→4,06 sn (%25). Ama aynı tabloda micro-utils ve cpu-bound hücrelerinde kazanım %8'de kalıyor ve blog açıkça "ortam kurulumunun baskın olduğu hücreler ±%3 bandında kalır" diyor. Jest 30 duyurusu da kendi 29→30 farkını veriyor: büyük bir TypeScript uygulamasında %37 daha hızlı koşu ve %77 daha düşük bellek; server testleri ~1.350 sn / 7,8 GB'den ~850 sn / 1,8 GB'ye indi.
İkisi aynı düzlemde değil: her ekip kendi önceki sürümüyle karşılaştırıyor, aralarında doğrudan bir A-B ölçümü yok.
ESM + TypeScript native desteği
Burada iki araç arasındaki en keskin fark ortaya çıkıyor. Jest'in kendi resmi dokümantasyonu ESM desteğini hâlâ "deneysel" (experimental) olarak nitelendiriyor: "implementasyon hatalar içerebilir ve bazı özellikler eksik olabilir" diyor ve aktivasyonu için Node'u --experimental-vm-modules bayrağıyla çalıştırmanı, ayrıca transform yapılandırmanı (transform: {} ya da ESM üretecek bir transformer) elle ayarlamanı istiyor.
Vitest ise package.json'ında "type": "module" ile doğrudan native ESM paketi olarak dağıtılıyor — sende ek bir deneysel bayrak veya elle transform ayarı gerektirmiyor. TypeScript tarafında da aynı fark geçerli: Vitest, Vite'ın esbuild tabanlı transformunu kullandığı için .ts dosyaların ek kurulum olmadan çalışır.
Jest 30.5.2'nin kendi changelog'u (18 Eylül 2026) bu boşluğu kapatmaya yönelik somut bir adım içeriyor: @jest/transform artık, hiçbir transformer tanımlı değilse, .ts/.mts/.cts dosyalarını Node'un yerleşik TypeScript-strip özelliğiyle işleyebiliyor. Bu, "Jest'i sürdürmenin gerekçesi daralıyor" görüşüne karşı hafif ama gerçek bir karşı hamle — Jest ekibi de ESM/TS transform yükünü azaltmaya çalışıyor, sıfırlanmış değil.
Browser mode, component testing ve mocking
Vitest'in resmi bir Browser Mode'u var: npx vitest init browser ile kurup preview, playwright veya webdriverio sağlayıcılarından birini seçerek testlerini gerçek bir tarayıcıda çalıştırabiliyorsun. Vitest 5 bu moda yeni bir "Trace View" ekledi — her etkileşimi, assertion'ı ve page.mark çağrısını DOM snapshot'ı olarak kaydeden, adım adım geri oynatılabilen bir görünüm. Chromium'da react-spa senaryosunda ölçülen kazanım 2,40 sn'den 2,01 sn'ye (yaklaşık %16). Jest'in resmi dokümantasyonunda eşdeğer, first-party bir browser-mode veya component-testing özelliği bulunmuyor; Jest projeleri bu ihtiyaç için ayrı araçlara (Cypress CT, Playwright CT) yöneliyor.
Mocking tarafında Vitest'in API'si bilinçli olarak Jest'e benziyor (vi.fn/vi.mock ↔ jest.fn/jest.mock). Vitest 5 ayrıca yeni bir koşullu mock API'si ekledi: vi.when(fn).calledWith(1).thenResolve(...) — argümana göre farklı davranış tanımlama, derin eşitlik ve asymmetric matcher desteğiyle. Dikkat etmen gereken davranış değişikliği şu: Vitest 5'te clearMocks artık varsayılan olarak true — her testten önce vi.clearAllMocks() otomatik çağrılıyor; beforeAll seviyesinde mock kuran projeler en çok etkilenen grup.
Coverage motoru ve monorepo desteği
Coverage tarafında Jest'in avantajı basitlik: tek bir --coverage bayrağıyla, ek kurulum yapmadan çalışıyor. Vitest'te hem v8 hem istanbul sağlayıcısını seçebiliyorsun; Vitest 5'te v8 sağlayıcısı raporları sınırlı bellek kullanımıyla birleştirecek şekilde iyileştirildi, istanbul sağlayıcısı da artık aktif bakımı yapılan @vitest/istanbuljs paketlerine taşındı. Büyük projelerde bu, raporlama hızını ve kararlılığını doğrudan etkiliyor.
Monorepo/çoklu-proje desteğinde Vitest 5 yapısal bir değişiklik getirdi: iç içe (nested) projeler artık varsayılan olarak root config'i devralıyor — önceden zorunlu olan extends: true kaldırıldı — ve test.projects içinde referans verilen bir config dosyası artık kendi projects tanımını root'u tekrar etmeden yapabiliyor. Filtreleme için --project bayrağına -p kısayolu eklendi (vitest -p app). Jest'in de --projects bayrağıyla birden fazla config'i tek komutla çalıştırma desteği var, ama Vitest 5'teki hiyerarşik, devralımlı model daha yeni ve daha granüler bir monorepo mimarisi sunuyor — büyüyen bir Vite monorepo'da bu fark hissediliyor.
Ekosistem ataleti: React Native ve Metro
Jest'in en güçlü savunma hattı burada. React Native'in resmi dokümantasyonu açıkça şunu söylüyor: "React Native'in varsayılan şablonu Jest testing framework'üyle gelir, bu ortama özel ayarlanmış bir preset içerir." Bu, Jest'i RN ekosisteminde fiilen varsayılan seçim yapıyor; Expo'nun resmi dokümantasyonu da jest-expo preset'inin kurulumunu adım adım anlatıyor.
Vitest ise Vite'ın transform pipeline'ına dayandığı için Metro bundler tabanlı React Native projelerinde first-party bir karşılığa sahip değil; bu araştırmada reactnative.dev dokümantasyonunda Vitest'e herhangi bir referans bulunamadı, çünkü Metro Vite tabanlı değil. Vitest'in Browser Mode sağlayıcı listesi de yalnızca Playwright, WebdriverIO ve preview'ı kapsıyor — RN/Metro için ayrı bir birinci sınıf sağlayıcı yok.
Pratik sonuç: büyük, mevcut bir Jest suite'in varsa ve özellikle React Native/Metro'ya bağımlıysan, Vitest'e geçişin kazancı göç maliyetini karşılamayabilir. Bu senaryoda kademeli bir yol (yeni testler Vitest, mevcut suite Jest'te kalır) daha gerçekçi bir seçenek — brief'teki üçüncü yol hipotezini kaynaklar destekliyor.
Proje yaşı, lisans ve ekosistem büyüklüğü
Jest'in GitHub deposu (jestjs/jest) 10 Aralık 2013'te açıldı — Vitest'in vitest-dev/vitest deposu ise 3 Aralık 2021'de. Bu 8 yıllık fark yıldız sayılarına da yansıyor: Jest 45.467, Vitest 17.151 (yaklaşık 2,65 kat). İkisi de MIT lisanslı ve ücretsiz; ticari fiyat/plan tablosu yok.
Yalnız yıldıza bakarsan tabloyu eksik okursun. Jest'in resmi ana sayfasındaki "Who uses Jest?" bölümü son bir ayda 100 milyondan fazla indirme ve GitHub'da 15 milyondan fazla açık depoda kullanım bildiriyor; şirket listesinde Facebook, Airbnb, Instagram, Spotify, Twitter ve The New York Times anılıyor, ayrıca projeyi aylık 3 dolar ve üzeri destekleyen 600'den fazla bağışçı var. Vitest tarafında eşdeğer bir "kimler kullanıyor" sayfasını taradığım sayfalarda (vitest.dev ana sayfası, /guide/ ve blog) bulamadım — bu asimetri ürün kalitesi değil, yayımlanan veri farkı.
Sahiplik tarafında Jest, Meta (Facebook) bünyesinde doğdu ve 11 Mayıs 2022'deki resmi duyuruyla OpenJS Foundation üzerinden Jest Core ekibine devredildi. Vitest ise 790'dan fazla katkıcıya sahip, sürdürücüleri arasında Vite'ın yaratıcısı Evan You'nun da bulunduğu, OpenCollective bağışlarıyla finanse edilen bir proje.