Diğer Test Çalıştırıcılarıyla Karşılaştırmalar
Jest
Jest, çoğu JavaScript projesi için kullanıma hazır destek, kullanıcı dostu bir API (it
ve expect
) ve çoğu kurulumun gerektireceği tam test özellikleriyle (snapshot'lar, mock'lar, coverage) test çerçevesi alanında hakimiyet kurmuştur. Jest ekibine ve topluluğuna, kullanıcı dostu bir test API'si geliştirdikleri ve web ekosisteminde standartlaşan birçok test yöntemine öncülük ettikleri için teşekkür ederiz.
Vite kurulumlarında Jest kullanmak mümkündür. @sodatea, Jest için birinci sınıf Vite entegrasyonu sağlamayı amaçlayan vite-jest'i oluşturmuştur. Jest'teki son engelleyiciler çözüldü, bu nedenle bu, birim testleriniz için geçerli bir seçenektir.
Ancak, Vite'nin TypeScript, JSX ve popüler UI Framework'ler gibi yaygın web araçları için destek sağladığı günümüzde, Jest gereksiz bir karmaşıklık yaratabilir. Uygulamanız Vite tarafından destekleniyorsa, yapılandırma ve bakım için iki ayrı sisteme sahip olmak mantıklı olmayabilir. Vitest ile geliştirme, derleme ve test ortamlarınızın yapılandırmasını tek bir sistemde tanımlayabilirsiniz. Böylece aynı eklentileri ve aynı vite.config.js
dosyasını kullanabilirsiniz.
Kitaplığınız Vite kullanmıyor olsa bile (örneğin, esbuild veya Rollup ile oluşturulmuşsa), Vitest, birim testleriniz için daha hızlı bir çalıştırma ve Vite'in anında Hot Module Reload (HMR) kullanan varsayılan takip modu sayesinde geliştirici deneyiminde (DX) bir sıçrama sağladığı için ilginç bir seçenektir. Vitest, Jest API ve ekosistem kitaplıklarının çoğuyla uyumluluk sunar, bu da onu çoğu projede Jest'in yerine kolayca kullanılabilecek bir alternatif yapar.
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 (headless) 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 yakalayamayacağı sorunları yakalayabilir.
Cypress test sürücüsü, öğelerin görünür, erişilebilir ve etkileşimli olup olmadığını 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 etmek üzere tasarlanmıştır. Bileşeninizin test raporlayıcısıyla birlikte oluşturulduğunu görürsünüz. Test tamamlandıktan sonra, bileşen etkileşimli kalır ve tarayıcı geliştirme araçlarınızı kullanarak meydana gelen hataları ayıklayabilirsiniz.
Buna karşılık Vitest, başsız testlerde en iyi geliştirici deneyimini (DX) sunmaya odaklanır ve son derece hızlıdır. Vitest gibi Node tabanlı çalıştırıcılar, tarayıcı API'lerine başvuran herhangi bir kodu hızlı bir şekilde birim test etmeniz için yeterli uygulayan jsdom
gibi çeşitli kısmen uygulanmış tarayıcı ortamlarını destekler. Buradaki dezavantaj, bu tarayıcı ortamlarının bazı özellikleri tam olarak destekleyememesidir. Örneğin, jsdom'da window.navigation
veya bir düzen motoru (offsetTop
vb.) gibi bir dizi özellik eksiktir.
Son olarak, Web Test Runner'dan farklı olarak, Cypress test çalıştırıcısı bir IDE gibidir. Test sonuçlarını ve günlükleri tarayıcıda gerçek zamanlı olarak gösterir.
Cypress ayrıca ürünlerine Vite entegre ediyor: Uygulamalarının UI'sini Vitesse kullanarak yeniden oluşturuyor ve projelerinin gelişimini test etmek için Vite'i kullanıyor.
Cypress'in başsız kodu birim test etmek için iyi bir seçenek olmadığına, ancak Cypress'i (E2E ve Bileşen Testi için) ve Vitest'i (birim testleri için) kullanmanın uygulamanızın test ihtiyaçlarını karşılayacağına inanıyoruz.
WebdriverIO
WebdriverIO, Cypress'e benzer şekilde, tarayıcı tabanlı alternatif bir test çalıştırıcısıdır 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 arka planda Vitest'in bileşenlerini kullanır; örneğin, bileşen testlerinde sahte nesne oluşturma ve saplama (mocking ve stubbing) için.
WebdriverIO, mantığınızı gerçek bir tarayıcıda test etmenize olanak tanıyan Cypress ile aynı avantajlarla birlikte gelir. Ancak, otomasyon için gerçek web standartlarını kullanır, bu da Cypress'te testleri çalıştırırken karşılaşılan bazı dezavantajları ve sınırlamaları ortadan kaldırır. Ayrıca, mobil cihazlarda da testler çalıştırmanıza olanak tanır ve uygulamanızı daha da fazla ortamda test etmenize erişim sağlar.
Web Test Runner
@web/test-runner, testleri başsız bir tarayıcıda yürütür ve tarayıcı API'lerini veya DOM'u taklit etmeye gerek kalmadan web uygulamanızla aynı yürütme ortamını sağlar. Bu aynı zamanda, Cypress testlerinde olduğu gibi, testte adım adım ilerlemek için bir UI gösterilmemesine rağmen, geliştirme araçlarını kullanarak gerçek bir tarayıcıda hata ayıklamayı da mümkün kılar. Bir takip modu vardır, ancak Vitest kadar gelişmiş değildir ve istediğiniz testleri her zaman otomatik olarak yeniden çalıştırmayabilir. @web/test-runner
'ı bir Vite projesiyle kullanmak için @remcovaes/web-test-runner-vite-plugin kullanın. @web/test-runner
, doğrulama veya mock kütüphaneleri içermez, bu nedenle bunları eklemek size kalmıştır.
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 yürütür, bu nedenle testler yalıtılmaz ve dosyalar arasında sızıntı olabilir. Ancak Vitest, testleri yalıtmak ve paralel olarak çalıştırmak için worker thread'leri kullanır. Kodunuzu dönüştürmek için uvu, require
ve loader kancalarına güvenir. Vitest, Vite'i kullanır, bu nedenle dosyalar Vite'in eklenti sisteminin tüm gücüyle dönüştürülür. Vite'in en yaygın web araçları (TypeScript, JSX, en popüler UI Çerçeveleri) için destek sağladığı bir dünyada, uvu karmaşıklığın bir tekrarını temsil edebilir. Uygulamanız Vite tarafından destekleniyorsa, yapılandırmak ve sürdürmek için iki farklı işlem hattına sahip olmak haklı gösterilemez. 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. uvu, değiştirilen testleri otomatik olarak yeniden çalıştırmak için gelişmiş bir takip moduna sahip değilken, Vitest, Vite'in anında Hot Module Reload (HMR) özelliğini kullanan varsayılan takip 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 olabilir.