Bosh sahifa Wiki Jest

Jest

JestJavaScript va TypeScript loyihalarida test yozish va ishga tushirish uchun ishlatiladigan test framework. U test runner, assertion, mock, snapshot, coverage va watch mode imkoniyatlarini bir paketda taqdim etadi. Jest frontend, Node.js, React va umumiy JavaScript kutubxonalarida keng qo‘llanadi.

Jest test fayllarini topadi, alohida workerlarda bajaradi va natijani report ko‘rinishida chiqaradi.

Test fayli

Testlar odatda quyidagi nomlashlardan foydalanadi:

*.test.js
*.spec.js
__tests__/

Aniq pattern konfiguratsiyada belgilanadi.

Test source faylga yaqin yoki alohida test directory’da saqlanishi mumkin.

describe va test

describe bog‘liq testlarni guruhlaydi.

test yoki it bitta behaviorni tekshiradi:

describe("sum", () => {
  test("adds two numbers", () => {
    expect(sum(2, 3)).toBe(5)
  })
})

Test nomi failure reportda aniq ko‘rinadi.

expect

Jest assertion API expect orqali ishlaydi.

Matcherlar:

  • toBe;
  • toEqual;
  • toContain;
  • toMatch;
  • toThrow;
  • toHaveBeenCalled;
  • toBeTruthy;
  • toBeNull.

Primitive va object equality uchun mos matcher tanlanadi.

toBe va toEqual

toBe Object.isga yaqin identity yoki primitive equality’ni tekshiradi.

toEqual object va array tarkibini chuqurroq solishtiradi.

Ikki alohida, ammo bir xil object toEqualdan o‘tishi, toBedan o‘tmasligi mumkin.

Setup va teardown

Hooklar:

  • beforeEach;
  • afterEach;
  • beforeAll;
  • afterAll.

Har testga kerakli toza holat beforeEachda yaratiladi.

Katta shared setup beforeAll bilan tezlashtirilishi mumkin, ammo mutable state testlarni bog‘lamasligi kerak.

Mock function

jest.fn() chaqiriqlarni yozadigan mock function yaratadi.

Tekshirish mumkin:

  • necha marta;
  • qanday argument;
  • qaysi tartib;
  • qanday natija.

Mock implementation yoki return value bilan sozlanadi.

Module mock

jest.mock() import qilingan modulni almashtiradi.

Network client, file system wrapper yoki boshqa dependency mock qilinishi mumkin.

Hoisting va ESM/CommonJS farqlari module mock behavioriga ta’sir qiladi.

Interface real modul bilan mos bo‘lishi kerak.

Spy

jest.spyOn() object methodini kuzatadi yoki vaqtincha almashtiradi.

Testdan keyin original method tiklanadi.

Global spy tozalanmasa boshqa testga ta’sir qiladi.

restoreAllMocks yoki explicit restore ishlatiladi.

Timer mock

Fake timer orqali timeout va intervalni real vaqt kutmasdan boshqarish mumkin.

Masalan:

debounce
retry
expiration
scheduled callback

Microtask va promise queue behaviori fake timer turiga qarab farq qilishi mumkin.

Async test

Promise qaytarish yoki async/await ishlatish mumkin.

Test asynchronous operation tugashini kutishi kerak.

Promise’ni return qilmaslik yoki await qilmaslik testning erta tugashiga olib keladi.

Rejected promise rejects matcher bilan tekshiriladi.

Callback test

Eski callback API uchun test done argumentidan foydalanishi mumkin.

done faqat success yoki error bilan bir marta chaqiriladi.

Promise va doneni bir testda aralashtirish noaniq behavior yaratadi.

Modern APIlarda promise afzal.

Snapshot testing

Object yoki rendered component outputi snapshot fayl bilan solishtiriladi.

Birinchi run snapshot yaratadi.

Keyingi o‘zgarish diff beradi.

Snapshotni ko‘rmasdan ommaviy yangilash regressiyani yashiradi.

Kichik va ma’noli snapshotlar foydaliroq.

Inline snapshot

Expected snapshot test faylining ichiga yoziladi.

Kichik string yoki object uchun qulay.

Katta output test kodini og‘irlashtiradi.

Generated value va formatting barqaror bo‘lishi kerak.

Coverage

Jest Istanbulga oid instrumentation orqali line, branch, function va statement coverage yig‘ishi mumkin.

Threshold konfiguratsiyada belgilanadi.

Coverage mode testni sekinlashtiradi.

Qoplanish test sifati bilan bir xil emas.

Test environment

Node environment server kodi uchun.

DOMga o‘xshash testlar uchun jsdom ishlatilishi mumkin.

jsdom haqiqiy browser rendering, layout va barcha web APIlarni to‘liq takrorlamaydi.

Browser-specific behavior E2E testda tekshiriladi.

Watch mode

Source o‘zgarganda tegishli testlar qayta ishlaydi.

Git change yoki filename pattern bo‘yicha filter qilish mumkin.

Bu developer feedbackini tezlashtiradi.

CI’da odatda non-interactive run ishlatiladi.

Parallel worker

Jest test fayllarini worker processlarda parallel bajaradi.

Shared port, database yoki global file collision yaratishi mumkin.

Test data unique bo‘ladi.

Juda ko‘p worker memory va CI resursini bosib yuborishi mumkin.

TypeScript

TypeScript testlar transform orqali bajariladi.

Variantlar:

  • Babel;
  • ts-jest;
  • boshqa transformer.

Type checking va test execution alohida jarayon bo‘lishi mumkin.

Test o‘tib, TypeScript compile xato berishi ehtimoli bor.

Configuration

Jest config:

ni belgilaydi.

Monorepo bir nechta project config’dan foydalanishi mumkin.

Test double tozalash

clear, reset va restore bir xil emas. Clear chaqiriq tarixini tozalaydi, reset implementationni ham olib tashlashi mumkin, restore esa spy qilingan original methodni qaytaradi. Noto‘g‘ri tanlov testlar orasida hidden state qoldiradi.

Module isolation

Node module cache sabab import qilingan singleton testlar orasida holat saqlashi mumkin. Module isolation yoki explicit reset ishlatiladi. Yaxshiroq design global mutable singletonni kamaytiradi.

Reporter

CI uchun JUnit XMLga o‘xshash machine-readable report, local uchun o‘qilishi qulay output ishlatiladi. Failure artifact test nomi va source map bilan bog‘lanadi.

Bog‘liq tushunchalar

Jest, JavaScript testing, Test runner, Matcher, Mock function, Snapshot testing, Code coverage, jsdom, TypeScript testing, Unit testing