Bosh sahifa Wiki Mocha

Mocha

MochaJavaScript va Node.js loyihalari uchun moslashuvchan test framework. U testlarni guruhlash, hooklar, asynchronous test va reporterlarni boshqaradi. Assertion, mock va coverage vositalari ko‘pincha alohida kutubxonalar orqali qo‘shiladi.

Mocha “hamma narsa bir paketda” modelidan ko‘ra composable ekotizimga yaqin.

Test strukturasi

BDD uslubidagi keng API:

  • describe;
  • it;
  • before;
  • after;
  • beforeEach;
  • afterEach.

Misol:

describe("calculator", () => {
  it("adds numbers", () => {
    // assertion
  })
})

TDD interface kabi boshqa UI variantlari ham mavjud bo‘lishi mumkin.

Assertion kutubxonasi

Mocha o‘zi to‘liq assertion API bermaydi.

Node assert, Chai yoki boshqa kutubxona ishlatiladi.

Masalan:

assert.equal(sum(2, 3), 5)

Jamoa matcher uslubi va pluginlarni tanlaydi.

Synchronous test

Test function oddiy tugasa muvaffaqiyatli hisoblanadi.

Exception tashlansa test yiqiladi.

Assertion failure odatda exception shaklida keladi.

Unutilgan assertion testni bo‘sh holda o‘tkazishi mumkin.

Promise

Test promise qaytarsa Mocha uning tugashini kutadi.

Promise reject bo‘lsa test yiqiladi.

async function avtomatik promise qaytaradi.

Await qilinmagan ichki asynchronous operation testdan keyin xato berishi mumkin.

done callback

Callback API uchun test done parameter oladi.

Asynchronous ish tugagach:

done()

xatoda:

done(error)

chaqiriladi.

Promise qaytarish va doneni birga ishlatish noto‘g‘ri.

Hook

beforeEach har test oldidan setup bajaradi.

afterEach cleanup qiladi.

before va after suite bo‘yicha bir marta ishlaydi.

Shared mutable fixture testlar tartibiga bog‘lanmasligi kerak.

Nested suite

describe ichida boshqa describe bo‘lishi mumkin.

Hooklar hierarchy bo‘yicha ishlaydi.

Juda chuqur nesting test nomini uzun va setupni yashirin qiladi.

Domain behaviorga mos sodda guruhlash afzal.

Timeout

Har test uchun maksimal vaqt belgilanadi.

Uzun integration test alohida timeout olishi mumkin.

Timeoutni juda katta qilish hangni yashiradi.

Asl sabab fixed sleep, network yoki tugamagan callback bo‘lishi mumkin.

Retry

Test ma’lum marta qayta bajarilishi mumkin.

Bu tashqi beqaror integration uchun vaqtinchalik yordam.

Retry o‘tgan testni to‘liq sog‘lom deb hisoblash mumkin emas.

Flaky status report qilinadi.

Reporter

Mocha turli output reportlarini qo‘llaydi:

CI machine-readable format olishi mumkin.

Local developmentda o‘qilishi qulay reporter tanlanadi.

Test discovery

Command argument va glob test fayllarini belgilaydi.

Masalan:

test/**/*.spec.js

Build output va source testlari ikki marta topilmasligi kerak.

ESM va TypeScript loader configurationga bog‘liq.

ESM

Node ES module va CommonJS testlari turli import va configga ega.

Package type, extension va loader bir-biriga mos bo‘ladi.

Module cache test isolationga ta’sir qiladi.

Dynamic import ayrim mock usullarini murakkablashtiradi.

TypeScript

Mocha TypeScriptni to‘g‘ridan-to‘g‘ri compile qilmaydi.

Runtime loader, transpiler yoki oldindan compilation ishlatiladi.

Source map stack trace’ni original .ts qatoriga qaytaradi.

Type checking CI’da alohida bajariladi.

Mock va spy

Sinon kabi kutubxona mock, stub, spy va fake timer beradi.

Mocha test lifecycle hooklari ularni restore qiladi.

Sandbox har testdan keyin barcha fake’larni tozalashga yordam beradi.

Global monkey patch qolib ketmasligi kerak.

Coverage

NYC/Istanbul yoki V8ga oid tool orqali coverage yig‘iladi.

Mocha faqat test runner.

Instrumentation ESM, TypeScript va child processlar bilan to‘g‘ri sozlanadi.

Coverage threshold CI’da tekshiriladi.

Parallel mode

Test fayllari parallel bajarilishi mumkin.

Root hook, global fixture va portlar parallelga mos bo‘lishi kerak.

Bir xil database yoki temp filename conflict yaratadi.

Parallelizm unit suite’da osonroq.

Root hook

Bir nechta test fayliga umumiy setup plugin orqali berilishi mumkin.

Masalan, global database connection yoki environment.

Yashirin root hook testni alohida ishga tushirganda tushunishni qiyinlashtirishi mumkin.

Scope hujjatlashtiriladi.

Exclusive va skip

only bitta suite yoki testni tanlaydi.

skip vaqtincha o‘tkazib yuboradi.

Repositoryga tasodifan only kirsa CI faqat oz testni bajarishi mumkin.

Lint yoki CI check bunga yo‘l qo‘ymaydi.

Mocha va Jest

Jest assertion, mock, snapshot va coverage’ni integratsiyalashgan tarzda beradi.

Mocha esa kerakli kutubxonalarni tanlashga moslashuvchan.

Legacy Node loyihalari va custom stackda Mocha qulay.

Konfiguratsiya qismlari ko‘proq bo‘lishi mumkin.

Chai uslublari

Chai assert, expect va should uslublarini taklif qilishi mumkin. Jamoa bitta asosiy uslubni tanlasa testlar izchil bo‘ladi. should object prototype’iga ta’sir qilishi mumkin, shuning uchun cheklovlari tushuniladi.

Sinon sandbox

Sandbox har test uchun spy, stub va fake timerlarni guruhlaydi. restore barcha o‘zgarishlarni tiklaydi. Bu global method patchi keyingi testga qolishining oldini oladi.

Leak aniqlash

Tugamagan timer, server yoki socket processni testlardan keyin ochiq ushlab turishi mumkin. Mocha run tugamasligi shunday resource leak signalidir. Cleanup hook va handle diagnostikasi ishlatiladi.

Integration suite

Unit va integration testlar boshqa directory, timeout va command bilan ajratiladi. Tez unit testlar localda doim, sekin integration testlar CI’da kerakli service bilan ishlaydi.

Bog‘liq tushunchalar

Mocha, JavaScript testing, Node.js, Test runner, Chai, Sinon, Async testing, Test hook, Reporter, Code coverage, Jest