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:

JavaScript

Har o’zgarishdan keyin natijalarni ko’z bilan solishtirish kerak. Test buni avtomatlashtiradi.

Oddiy test yozuvchi

Kutubxonasiz ham tamoyilni ko’rsatish mumkin:

JavaScript

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

JavaScript

Ustuvorlik tartibi:

  1. Chegara qiymatlar0, bo’sh massiv, null, chegaraning ikki tomoni;
  2. Xato holatlari — noto’g’ri kirish;
  3. Asosiy holat — odatiy ishlash;
  4. Tuzatilgan xatolar — har buzilgan joyga test yoziladi, qaytmasligi uchun.

Testga qulay kod

JavaScript

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

  1. Sodda funksiya yozing va uni qo’lda tekshiring;
  2. yuqoridagi test/kutilgan yordamchisi bilan uni sinang;
  3. chegara qiymatlar uchun test qo’shing;
  4. xato beradigan holatni sinang;
  5. toBe va toEqual farqini obyektda ko’ring;
  6. 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 uchun toBe, kasr uchun toBeCloseTo.
  • Avval chegara va xato holatlarini sinang.
  • Sof funksiya va tashqaridan uzatilgan bog’liqlik testni osonlashtiradi.

Keyingi darsda tezlik va optimallashtirish.

Bu dars foydali bo'ldimi?

marta ko'rildi