Bosh sahifa Wiki Vitest

Vitest

Vitest — Vite ekotizimiga mos, JavaScript va TypeScript loyihalari uchun tezkor test framework. U Jestga o‘xshash test va assertion APIlarini, mock, snapshot, coverage va watch mode imkoniyatlarini taqdim etadi. Vitest Vite konfiguratsiyasi, transformlari va modul graphidan foydalanishi mumkin.

U ayniqsa Vite asosidagi frontend va kutubxona loyihalarida qulay.

Vite bilan integratsiya

Applicationda mavjud alias, plugin va transformlar testda qayta ishlatiladi.

Bu production build bilan test environment orasidagi farqni kamaytiradi.

Biroq browser runtime va Node test environment baribir bir xil emas.

Vite pluginning test behaviori tekshiriladi.

Test sintaksisi

Asosiy APIlar:

  • describe;
  • it;
  • test;
  • expect;
  • beforeEach;
  • afterEach;
  • beforeAll;
  • afterAll.

Jestdan ko‘chayotgan jamoa ko‘p testlarni oz o‘zgarish bilan ishlatishi mumkin.

Barcha Jest APIlari aynan bir xil bo‘lishi shart emas.

Assertion

expect matcherlar orqali actual va expected qiymatni solishtiradi.

Misol:

expect(sum(2, 3)).toBe(5)

Object equality, exception, mock call va async natijalar uchun maxsus matcherlar mavjud.

DOM matcherlar qo‘shimcha kutubxona bilan ulanadi.

Mock

vi.fn() mock function yaratadi.

vi.mock() modulni almashtiradi.

vi.spyOn() mavjud methodni kuzatadi.

Testdan keyin mock state va implementation tozalanadi.

Global mock boshqa testga qolmasligi kerak.

Hoisting

Module mock import evaluationdan oldin qo‘llanishi mumkin.

Hoisting qoidasi dynamic variable va factory’da cheklov yaratadi.

ES module live binding va top-level import behaviorini tushunish kerak.

Dependency injection ba’zan module mockdan soddaroq.

Async test

Vitest promise va async/awaitni qo‘llaydi.

Rejected promise:

await expect(promise).rejects...

bilan tekshiriladi.

Await unutilsa test muvaffaqiyatli tugab, xato keyin unhandled rejection bo‘lishi mumkin.

Fake timer

vi.useFakeTimers() timer APIlarini nazorat qiladi.

Vaqtni oldinga surish va pending timerlarni bajarish mumkin.

Debounce, throttle va expiration testlari tezlashadi.

Test tugagach real timerlar tiklanadi.

Snapshot

External va inline snapshot ishlatiladi.

Snapshot update intentional bo‘lishi kerak.

Date, random ID va platformaga bog‘liq path normalize qilinadi.

Haddan tashqari katta snapshot review’ni qiyinlashtiradi.

Watch mode

Vite file graphidan foydalanib o‘zgargan source bilan bog‘liq testlarni tez qayta ishga tushiradi.

Interactive filter va filename tanlash mumkin.

Developer local feedback oladi.

CI bir martalik run va aniq exit code ishlatadi.

Pool

Testlar thread yoki process pool’da bajarilishi mumkin.

Tanlov dependency, native addon va isolationga ta’sir qiladi.

Shared global state parallel workerlarda kutilmagan farq berishi mumkin.

Har test environmenti mustaqil bo‘lishi kerak.

Test environment

Keng environmentlar:

  • Node;
  • jsdom;
  • happy-domga oid variant;
  • custom environment.

DOM emulation real layout engine emas.

Canvas, CSS va browser permission behaviori browser testda tekshiriladi.

Browser mode

Vitest ayrim testlarni real browserga yaqin muhitda bajarish imkoniyatiga ega bo‘lishi mumkin.

Bu component va browser APIlarini tekshiradi.

Tool versioni va providerga qarab imkoniyatlar farq qiladi.

E2E navigation uchun maxsus browser automation tool kuchliroq.

Component testing

React, Vue, Svelte va boshqa UI componentlar test utility bilan render qilinadi.

Test user ko‘radigan role, text va event orqali interaction qiladi.

Internal component methodiga bog‘lanish refactoringni qiyinlashtiradi.

Coverage

Coverage provider orqali yig‘iladi.

V8 yoki Istanbulga oid usullar ishlatilishi mumkin.

Providerlar source mapping va instrumentationda farq qiladi.

Threshold, exclude va report format configurationda belgilanadi.

Type checking

Vitest runtime testni bajaradi, lekin to‘liq TypeScript type checking alohida tsc yoki plugin orqali bajarilishi mumkin.

Transpilation type xatoni avtomatik topmasligi mumkin.

CI test va typecheckni alohida qadamda ishlatadi.

Workspace

Monorepo yoki turli environmentlar uchun bir nechta test project yaratiladi.

Masalan:

Har project o‘z include, setup va environmentiga ega.

Setup file

Global matcher, polyfill va cleanup setup faylida yoziladi.

U har test environmenti oldidan ishga tushishi mumkin.

Setup juda ko‘p hidden global yaratmasligi kerak.

Test dependencylari aniq ko‘rinishi ma’qul.

Migration

Jestdan o‘tishda tekshiriladi:

Faqat package nomini almashtirish katta loyiha uchun yetarli bo‘lmasligi mumkin.

Performance

Vitest Vite transform cache va watch graphdan foyda oladi.

Testlarning o‘zi sekin I/O, database yoki ulkan setupga ega bo‘lsa runner tezligi yordam bermaydi.

Profiling eng sekin suite va hooklarni topadi.

In-source testing

Ayrim loyihalarda testlar source fayl ichidagi maxsus blokda yozilishi mumkin. Bu kichik utility uchun qulay, ammo production bundlega test code kirmasligi uchun build transformi to‘g‘ri sozlanadi.

Mocked date

vi.setSystemTime()ga o‘xshash imkoniyat fixed vaqt bilan test qilishga yordam beradi. Timer va Date ikkalasi bir xil fake-clock rejimida bo‘lishi kerak. Testdan keyin haqiqiy vaqt tiklanadi.

Sharding

Katta suite CI joblar orasida shard qilinishi mumkin. Har shard mustaqil data va bir xil environment oladi. Yakuniy coverage va reportlar keyin merge qilinadi.

Bog‘liq tushunchalar

Vitest, Vite, JavaScript testing, TypeScript testing, Test runner, Mock, Snapshot testing, Watch mode, Code coverage, Component testing