JavaScript kodni testlash
Kodni har o’zgartirishda qo’lda tekshirish uzoq va ishonchsiz. Test — kodni tekshiradigan kod: bir marta yoziladi, har safar avtomatik ishlaydi.
Nima uchun kerak
Asosiy foyda — regressiyadan himoya: eski kodni o’zgartirganda nimadir buzilsa, test darhol aytadi.
Testsiz tekshiruv
Avval oddiy yondashuvni ko’ramiz:
Har o’zgarishdan keyin natijalarni ko’z bilan solishtirish kerak. Test buni avtomatlashtiradi.
Oddiy test yozuvchi
Kutubxonasiz ham tamoyilni ko’rsatish mumkin:
Haqiqiy test kutubxonalari ham aynan shu ishni bajaradi — faqat ancha boyroq imkoniyatlar bilan.
Vitest bilan
npm install -D vitest
package.json ga:
{
"scripts": {
"test": "vitest"
}
}
chegirma.js:
export function chegirma(narx, foiz) {
if (foiz < 0 || foiz > 100) throw new RangeError("foiz 0-100");
return Math.round(narx * (1 - foiz / 100));
}
chegirma.test.js:
import { describe, it, expect } from "vitest";
import { chegirma } from "./chegirma.js";
describe("chegirma", () => {
it("10% chegirmani to'g'ri hisoblaydi", () => {
expect(chegirma(100000, 10)).toBe(90000);
});
it("0% da narxni o'zgartirmaydi", () => {
expect(chegirma(100000, 0)).toBe(100000);
});
it("noto'g'ri foizda xato beradi", () => {
expect(() => chegirma(100, 150)).toThrow(RangeError);
});
});
Ishga tushirish: npm test.
AAA naqshi
Har test uch qismdan iborat bo’lsin:
it("savatga mahsulot qo'shadi", () => {
// Arrange — tayyorlash
const savat = yangiSavat();
const mahsulot = { nom: "Olma", narx: 12000 };
// Act — bajarish
savat.qosh(mahsulot);
// Assert — tekshirish
expect(savat.soni()).toBe(1);
expect(savat.jami()).toBe(12000);
});
Bu tuzilma testni o’qishni osonlashtiradi va bitta testda bir necha ishni tekshirishdan saqlaydi.
Asosiy matcherlar
| Matcher | Tekshiradi |
|---|---|
toBe(x) |
Aynan tenglik (===) — sonlar, matnlar |
toEqual(x) |
Tuzilma tengligi — obyekt va massivlar |
toBeCloseTo(x) |
Kasr sonlar (yaxlitlash xatosi bilan) |
toContain(x) |
Massiv yoki matn ichida bormi |
toThrow() |
Xato beradimi |
toHaveLength(n) |
Uzunlik |
Nimani sinash kerak
Ustuvorlik tartibi:
- Chegara qiymatlar —
0, bo’sh massiv,null, chegaraning ikki tomoni; - Xato holatlari — noto’g’ri kirish;
- Asosiy holat — odatiy ishlash;
- Tuzatilgan xatolar — har buzilgan joyga test yoziladi, qaytmasligi uchun.
Testga qulay kod
Sof funksiyalar testga eng qulay: tayyorgarlik kerak emas, natija bashorat qilinadi.
Tashqi bog’liqlikni argument sifatida uzatish ham yordam beradi:
// Qiyin: ichida vaqtga bog'lanadi
function eskirdimi(sana) {
return Date.now() - sana > 86400000;
}
// Oson: vaqt tashqaridan beriladi
function eskirdimi(sana, hozir = Date.now()) {
return hozir - sana > 86400000;
}
Qamrov haqida
Amaliy mashq
- Sodda funksiya yozing va uni qo’lda tekshiring;
- yuqoridagi
test/kutilganyordamchisi bilan uni sinang; - chegara qiymatlar uchun test qo’shing;
- xato beradigan holatni sinang;
toBevatoEqualfarqini obyektda ko’ring;- tashqi holatga bog’liq funksiyani sof qilib qayta yozing.
Qisqacha xulosa
- Test — kodni tekshiradigan kod; regressiyadan himoya qiladi.
- Birlik testlari ko’p va tez, E2E kam va sekin.
- AAA: Arrange → Act → Assert.
- Obyekt uchun
toEqual, aniq qiymat uchuntoBe, kasr uchuntoBeCloseTo. - Avval chegara va xato holatlarini sinang.
- Sof funksiya va tashqaridan uzatilgan bog’liqlik testni osonlashtiradi.
Keyingi darsda tezlik va optimallashtirish.