Összehasonlítás más tesztfuttatókkal
Jest
A Jest uralta a tesztelési keretrendszerek piacát azáltal, hogy beépített támogatást nyújtott a legtöbb JavaScript projekthez, kellemesen használható API-t (it
és expect
), és a teszteléshez szükséges összes funkciót, amelyre a legtöbb beállításnak szüksége van (pillanatképek, mockok, lefedettség). Köszönetet mondunk a Jest csapatának és közösségének, hogy egy élvezetes tesztelési API-t hoztak létre, és számos tesztelési szokást terjesztettek, amelyek ma már a webes ökoszisztéma szabványává váltak.
A Jest használható Vite környezetben is. @sodatea létrehozta a vite-jest eszközt, amelynek célja az első osztályú Vite integráció biztosítása a Jest számára. A Jestben lévő utolsó akadályok elhárultak, így ez egy érvényes opció az egységtesztekhez.
Azonban egy olyan világban, ahol a Vite támogatást nyújt a leggyakoribb webes eszközökhöz (TypeScript, JSX, legnépszerűbb UI keretrendszerek), a Jest felesleges komplexitást jelent. Ha az alkalmazásod Vite-tal működik, két különböző pipeline konfigurálása és karbantartása nem indokolt. A Vitesttel egyetlen pipeline-ként definiálhatod a fejlesztési, buildelési és tesztelési környezetek konfigurációját, ugyanazokat a plugineket és ugyanazt a vite.config.js fájlt megosztva.
Még ha a könyvtárad nem is használja a Vite-ot (például ha esbuilddel vagy Rolluppal készült), a Vitest érdekes opció, mivel gyorsabb futást biztosít az egységtesztekhez, és a Vite azonnali Hot Module Reload (HMR) alapértelmezett figyelő módjának köszönhetően jelentős javulást jelent a fejlesztői élményben. A Vitest kompatibilitást kínál a Jest API és ökoszisztéma könyvtárainak nagy részével, így a legtöbb projektben a Jest kiváltására alkalmas.
Cypress
A Cypress egy böngésző alapú tesztfuttató és a Vitest kiegészítő eszköze. Ha Cypress-t szeretnél használni, javasoljuk, hogy a Vitestet használd az alkalmazásod összes felhasználói felület nélküli logikájához, és a Cypress-t az összes böngésző alapú logikához.
A Cypress egy végpontok közötti tesztelési eszközként ismert, de az új komponens tesztfuttatója nagyszerűen támogatja a Vite komponensek tesztelését, és ideális választás minden olyan dolog tesztelésére, ami böngészőben renderelődik.
A böngésző alapú futtatók, mint a Cypress, WebdriverIO és Web Test Runner, olyan problémákat fognak elkapni, amelyeket a Vitest nem tud, mert valódi böngészőt és valódi böngésző API-kat használnak.
A Cypress tesztelési megközelítése arra összpontosít, hogy az elemek láthatók, hozzáférhetők és interaktívak legyenek. A Cypress kifejezetten UI fejlesztésre és tesztelésre készült, és a fejlesztői élménye a vizuális komponensek tesztelésére összpontosít. A komponensedet a tesztjelentés mellett renderelve látod. Amint a teszt befejeződött, a komponens interaktív marad, és a böngésző fejlesztői eszközeivel hibakeresést végezhetsz az esetleges hibákon.
Ezzel szemben a Vitest a lehető legjobb fejlesztői élmény biztosítására összpontosít a villámgyors, felhasználói felület nélküli teszteléshez. A Node-alapú futtatók, mint a Vitest, különböző részlegesen implementált böngésző környezeteket támogatnak, mint például a jsdom
, amelyek elegendő funkcionalitást implementálnak ahhoz, hogy gyorsan egységtesztelhess bármilyen kódot, amely böngésző API-kra hivatkozik. A kompromisszum az, hogy ezeknek a böngésző környezeteknek korlátai vannak abban, hogy mit tudnak implementálni. Például a jsdom számos funkciót nem implementál, mint például a window.navigation
vagy egy elrendezési motor (offsetTop
, stb.).
Végül, a Web Test Runnerrel ellentétben, a Cypress tesztfuttatója inkább egy IDE-re hasonlít, mint egy tesztfuttatóra, mert a valódi renderelt komponenst is látod a böngészőben, a teszteredményekkel és naplókkal együtt.
A Cypress integrálta a Vite-ot a termékeibe is: újraépítették az alkalmazásuk UI-ját a Vitesse segítségével, és a Vite-ot használják a projektfejlesztés támogatására.
Úgy gondoljuk, hogy a Cypress nem jó opció a felhasználói felület nélküli kód egységtesztelésére, de a Cypress (E2E és komponens teszteléshez) és a Vitest (egységtesztekhez) használata lefedné az alkalmazásod tesztelési igényeit.
WebdriverIO
A WebdriverIO a Cypress-hez hasonlóan egy böngésző alapú alternatív tesztfuttató és a Vitest kiegészítő eszköze. Használható végpontok közötti tesztelési eszközként, valamint webkomponensek tesztelésére is. Még a Vitest komponenseit is használja a háttérben, pl. mockinghoz és stubbinghoz a komponens teszteken belül.
A WebdriverIO ugyanazokkal az előnyökkel bír, mint a Cypress, lehetővé téve a logika tesztelését valós böngészőben. Azonban tényleges web szabványokat használ az automatizáláshoz, ami megoldja a Cypressben történő tesztelés során felmerülő kompromisszumokat és korlátokat. Ezenkívül lehetővé teszi a tesztek futtatását mobilon is, így még több környezetben tesztelheted az alkalmazásodat.
Web Test Runner
Az @web/test-runner fej nélküli böngészőben futtatja a teszteket, ugyanazt a végrehajtási környezetet biztosítva, mint a webalkalmazásod, anélkül, hogy böngésző API-kat vagy a DOM-ot kellene mockolni. Ez lehetővé teszi a hibakeresést is egy valódi böngészőben a fejlesztői eszközök segítségével, bár nincs UI a teszt lépésenkénti futtatásához, mint a Cypress tesztekben.
Az @web/test-runner használatához Vite projekttel használd az @remcovaes/web-test-runner-vite-plugin plugint. Az @web/test-runner nem tartalmaz ellenőrző vagy mocking könyvtárakat, így neked kell hozzáadnod őket.
uvu
Az uvu egy tesztfuttató Node.js-hez és a böngészőhöz. Egyetlen szálon futtatja a teszteket, így a tesztek nincsenek izolálva, és befolyásolhatják egymást a fájlok között. A Vitest azonban munkaszálakat használ a tesztek izolálására és párhuzamos futtatására.
A kód transzformálásához az uvu a require és loader hookokat használja. A Vitest a Vite rendszert használja, így a fájlok a Vite plugin rendszerének teljes erejével transzformálódnak. Egy olyan világban, ahol a Vite támogatást nyújt a leggyakoribb webes eszközökhöz (TypeScript, JSX, legnépszerűbb UI keretrendszerek), az uvu feleslegesen növeli a komplexitást. Ha az alkalmazásod Vite-tal működik, két különböző pipeline konfigurálása és karbantartása nem indokolt. A Vitesttel egyetlen pipeline-ként definiálhatod a fejlesztési, buildelési és tesztelési környezetek konfigurációját, ugyanazokat a plugineket és ugyanazt a konfigurációt megosztva.
Az uvu nem biztosít okos figyelő módot a megváltozott tesztek újrafuttatásához, míg a Vitest elképesztő fejlesztői élményt biztosít a Vite azonnali Hot Module Reload (HMR) alapértelmezett figyelő módjának köszönhetően.
Az uvu gyors opció az egyszerű tesztek futtatására, de a Vitest gyorsabb és megbízhatóbb lehet bonyolultabb tesztek és projektek esetén.