Diğer Test Çalıştırıcılarla Karşılaştırmalar
Jest
Jest, çoğu JavaScript projesi için kullanıma hazır destek sunarak, kullanıcı dostu bir API (it
ve expect
) ve çoğu kurulumun gerektireceği tüm test özelliklerini (anlık görüntüler, sahte nesneler, kapsama) sağlayarak test çerçeveleri alanında önemli bir yer edinmiştir. Jest ekibine ve topluluğuna, keyifli bir test API'si oluşturdukları ve web ekosisteminde artık standart olan birçok test modelini ileriye taşıdıkları için minnettarız.
Jest, Vite kurulumlarında kullanılabilir. @sodatea, Jest için birinci sınıf Vite entegrasyonu sağlamayı amaçlayan vite-jest uygulamasını geliştirmiştir. Jest'teki son engeller çözüldüğü için, bu, birim testleriniz için geçerli bir seçenektir.
Ancak, en yaygın web araçları (TypeScript, JSX, en popüler UI Çerçeveleri) için destek sağlayan Vite varken, Jest gereksiz bir karmaşıklık katmanı oluşturur. Uygulamanız Vite tarafından destekleniyorsa, iki farklı yapılandırma ve bakım sürecine sahip olmak mantıklı değildir. Vitest ile geliştirme, derleme ve test ortamlarınız için yapılandırmayı tek bir işlem hattı olarak tanımlayabilir, aynı eklentileri ve aynı vite.config.js
dosyasını paylaşabilirsiniz.
Kütüphaneniz Vite kullanmıyor olsa bile (örneğin, esbuild veya Rollup ile oluşturulmuşsa), Vitest ilginç bir seçenektir çünkü birim testleriniz için daha hızlı bir çalışma ve Vite'ın anlık Hot Module Reload (HMR) kullanan varsayılan izleme modu sayesinde geliştirici deneyiminde (DX) önemli bir iyileşme sağlar. Vitest, Jest API'sinin ve ekosistem kütüphanelerinin çoğuyla uyumluluk sunar, bu nedenle çoğu projede Jest için doğrudan bir alternatif olmalıdır.
Cypress
Cypress, tarayıcı tabanlı bir test çalıştırıcısıdır ve Vitest'e tamamlayıcı bir araçtır. Cypress kullanmak isterseniz, uygulamanızdaki tüm başsız mantık için Vitest'i ve tüm tarayıcı tabanlı mantık için Cypress'i kullanmanızı öneririz.
Cypress, uçtan uca test aracı olarak bilinir, ancak yeni bileşen test çalıştırıcısı, Vite bileşenlerini test etmek için harika bir desteğe sahiptir ve bir tarayıcıda oluşturulan her şeyi test etmek için ideal bir seçimdir.
Cypress, WebdriverIO ve Web Test Runner gibi tarayıcı tabanlı çalıştırıcılar, gerçek tarayıcıyı ve gerçek tarayıcı API'lerini kullandıkları için Vitest'in yakalayamadığı sorunları yakalayacaktır.
Cypress'in test sürücüsü, öğelerin görünürlüğünü, erişilebilirliğini ve etkileşimliliğini belirlemeye odaklanmıştır. Cypress, UI geliştirme ve test etme için özel olarak tasarlanmıştır ve geliştirici deneyimi (DX) görsel bileşenlerinizi test etmeye odaklanmıştır. Bileşeninizin test raporuyla birlikte oluşturulduğunu görürsünüz. Test tamamlandığında, bileşen etkileşimli kalır ve tarayıcı geliştirici araçlarınızı kullanarak ortaya çıkan hataları ayıklayabilirsiniz.
Buna karşılık, Vitest yıldırım hızında, başsız testler için mümkün olan en iyi DX'i sunmaya odaklanmıştır. Vitest gibi Node tabanlı çalıştırıcılar, jsdom
gibi kısmen uygulanmış çeşitli tarayıcı ortamlarını destekler. Bu ortamlar, tarayıcı API'lerini kullanan herhangi bir kodu hızlıca birim test etmeniz için yeterli işlevsellik sunar. Ancak, bu tarayıcı ortamlarının uygulayabildikleri özellikler konusunda sınırlamaları vardır. Örneğin, jsdom'da bir dizi özellik eksiktir, örneğin window.navigation
veya bir düzen motoru (offsetTop
, vb.).
Son olarak, Web Test Runner'ın aksine, Cypress test çalıştırıcısı bir test çalıştırıcısından çok bir IDE'ye benzer çünkü tarayıcıda gerçek oluşturulmuş bileşeni, test sonuçları ve günlükleriyle birlikte görürsünüz.
Cypress, ürünlerine Vite'ı da entegre etmiştir: Uygulamalarının kullanıcı arayüzünü (UI) Vitesse kullanarak yeniden inşa ediyor ve projelerinin geliştirme süreçlerini test etmek için Vite'ı kullanıyor.
Cypress'in başsız kodun birim testi için uygun bir seçenek olmadığına inanıyoruz. Ancak, Cypress'i (uçtan uca ve bileşen testleri için) ve Vitest'i (birim testleri için) birlikte kullanmak, uygulamanızın tüm test ihtiyaçlarını karşılayacaktır.
WebdriverIO
WebdriverIO, Cypress'e benzer şekilde, tarayıcı tabanlı alternatif bir test çalıştırıcısı ve Vitest'e tamamlayıcı bir araçtır. Uçtan uca bir test aracı olarak ve web bileşenlerini test etmek için kullanılabilir. Hatta bileşen testlerinde sahte nesneler (mocking) ve saplamalar (stubbing) için Vitest'in bileşenlerini bile kullanır.
WebdriverIO, mantığınızı gerçek tarayıcıda test etme imkanı sunarak Cypress ile benzer avantajlar sağlar. Ancak, otomasyon için gerçek web standartlarını kullanır, bu da Cypress'te testleri çalıştırırken karşılaşılan bazı ödünleri ve sınırlamaları ortadan kaldırır. Ayrıca, mobil cihazlarda da testleri çalıştırmanıza olanak tanır, uygulamanızı daha fazla ortamda test etme imkanı sunar.
Web Test Runner
@web/test-runner, testleri başsız bir tarayıcıda çalıştırır ve tarayıcı API'lerini veya DOM'u taklit etme ihtiyacı olmadan web uygulamanızla aynı yürütme ortamını sağlar. Bu aynı zamanda geliştirici araçlarını kullanarak gerçek bir tarayıcı içinde hata ayıklamayı da mümkün kılar, ancak Cypress testlerinde olduğu gibi testi adım adım ilerletmek için bir kullanıcı arayüzü (UI) gösterilmez.
@web/test-runner
'ı bir Vite projesiyle kullanmak için @remcovaes/web-test-runner-vite-plugin kullanın. @web/test-runner
, iddia (assertion) veya sahte nesne (mocking) kütüphaneleri içermez, bu nedenle bunları sizin eklemeniz gerekir.
uvu
uvu, Node.js ve tarayıcı için bir test çalıştırıcısıdır. Testleri tek bir iş parçacığında çalıştırır, bu nedenle testler izole değildir ve dosyalar arasında veri sızıntısı yaşanabilir. Vitest ise, testleri izole etmek ve paralel olarak çalıştırmak için işçi thread'lerini (worker threads) kullanır.
Kodunuzu dönüştürmek için uvu, require
ve loader hook'larına güvenir. Vitest, Vite kullanır, bu nedenle dosyalar Vite'ın eklenti sisteminin tam gücüyle dönüştürülür. En yaygın web araçları (TypeScript, JSX, en popüler UI Çerçeveleri) için destek sağlayan Vite varken, uvu gereksiz bir karmaşıklık katmanı oluşturur. Uygulamanız Vite tarafından destekleniyorsa, iki farklı yapılandırma ve bakım sürecine sahip olmak mantıklı değildir. Vitest ile geliştirme, derleme ve test ortamlarınız için yapılandırmayı tek bir işlem hattı olarak tanımlayabilir, aynı eklentileri ve aynı yapılandırmayı kullanabilirsiniz.
uvu, değişen testleri yeniden çalıştırmak için akıllı bir izleme modu sunmazken, Vitest, Vite anlık Hot Module Reload (HMR) kullanan varsayılan izleme modu sayesinde size harika bir geliştirici deneyimi (DX) sunar.
uvu, basit testleri çalıştırmak için hızlı bir seçenektir, ancak Vitest, daha karmaşık testler ve projeler için daha hızlı ve daha güvenilir sonuçlar verebilir.