Test freymvorklari


ULASHISH

Node.js test tizimiga kirish

Sinov Node.js ilovalaringiz ishonchli va texnik xizmat ko‘rsatishini ta’minlashga yordam beruvchi ishlab chiqish jarayonining muhim qismidir.

Ushbu sahifa Node.js ekotizimidagi eng mashhur sinov ramkalari va vositalarini taqdim etadi, bu sizga loyihangiz uchun to‘g‘risini tanlashga yordam beradi.

Eslatma: Yaxshi sinov tizimi tezkor bo‘lishi, foydali xato xabarlarini taqdim etishi, turli turdagi testlarni (birlik, integratsiya, e2e) qo‘llab-quvvatlashi va ishlab chiqish ish jarayoni bilan yaxshi integratsiyalashishi kerak.


Ommabop sinov ramkalari

Bu yerda Node.js ekotizimidagi eng mashhur va keng qo‘llaniladigan sinov ramkalari:


hazil

Jest - bu Facebook tomonidan ishlab chiqilgan soddalikka qaratilgan ajoyib JavaScript test tizimi.

Bu nol konfiguratsiyali sinov platformasi bo‘lib, u ko‘pchilik JavaScript loyihalari uchun qutidan tashqarida ishlaydi.

Quyidagilar uchun eng yaxshisi: Minimal sozlangan to‘liq xususiyatli test, ham frontend, ham backend testlari uchun ajoyib

Set

npm install --save-dev jest

Sinov namunasi

// utils/math.js
function sum(a, b) {
  if (typeof a !== 'number' || typeof b !== 'number') {
    throw new Error('Both arguments must be numbers');
  }
  return a + b;
}

function divide(a, b) {
  if (b === 0) {
    throw new Error('Division by zero');
  }
  return a / b;
}

module.exports = { sum, divide };

// __tests__/math.test.js
const { sum, divide } = require('../utils/math');

describe('Math utilities', () => {
  describe('sum()', () => {
    it('should add two numbers correctly', () => {
      expect(sum(1, 2)).toBe(3);
      expect(sum(-1, 1)).toBe(0);
    });

    it('should throw error for non-number inputs', () => {
      expect(() => sum('1', 2)).toThrow('Both arguments must be numbers');
    });
  });

  describe('divide()', () => {
    it('should divide two numbers correctly', () => {
      expect(divide(10, 2)).toBe(5);
    });

    it('should throw error when dividing by zero', () => {
      expect(() => divide(10, 0)).toThrow('Division by zero');
    });
  });
});

Asosiy xususiyatlar

  • Nol konfiguratsiya: Minimal sozlash bilan qutidan tashqarida ishlaydi
  • Tez va parallel: Yaxshiroq ishlash uchun testlarni parallel ravishda bajaradi
  • O‘rnatilgan qamrov: O‘rnatilgan kod qamrovi hisoboti bilan birga keladi
  • Keng qamrovli mocking: Kuchli mock qilish qobiliyati
  • Snapshot testi: React va boshqa frameworklar bilan UI testi uchun juda mos keladi
  • Tomosha rejimi: Fayl o‘zgarishlari bo‘yicha sinovlarni avtomatik ravishda qaytadan o‘tkazadi

Ishlayotgan testlar

# Run all tests
npx jest

# Run tests in watch mode
npx jest --watch

# Run tests matching a specific pattern
npx jest -t "math utilities"

# Generate coverage report
npx jest --coverage
  • Nolinchi konfiguratsiya talab qilinadi
  • O‘rnatilgan kod qamrovi
  • Snapshot sinovi
  • Ajoyib TypeScript-ni qo‘llab-quvvatlash
  • Mocking qo‘llab-quvvatlashi


Mocha

Mocha - bu Node.js va brauzerda ishlaydigan JavaScript test tizimi bo‘lib, asinxron testni oddiy va qiziqarli qiladi.

Quyidagilar uchun eng yaxshisi: Keng turdagi plaginlar va integratsiyalarga ega moslashuvchan test

Set

npm install --save-dev mocha chai

Sinov namunasi

// test/math.test.js
const { expect } = require('chai');
const { sum, divide } = require('../utils/math');

describe('Math Utilities', () => {
  describe('sum()', () => {
    it('should return the sum of two numbers', () => {
      expect(sum(1, 2)).to.equal(3);
      expect(sum(-1, 1)).to.equal(0);
    });

    it('should throw error for non-number inputs', () => {
      expect(() => sum('1', 2)).to.throw('Both arguments must be numbers');
    });
  });

  describe('divide()', () => {
    it('should divide two numbers correctly', () => {
      expect(divide(10, 2)).to.equal(5);
    });

    it('should throw error when dividing by zero', () => {
      expect(() => divide(10, 0)).to.throw('Division by zero');
    });
  });
});

Asosiy xususiyatlar

  • Moslashuvchan: Har qanday tasdiqlash kutubxonasi (Chai, should.js va boshqalar) bilan ishlaydi.
  • Brauzerni qo‘llab-quvvatlash: Brauzerda testlarni o‘tkazishi mumkin
  • Asinxron qo‘llab-quvvatlash: Asinxron kodni sinash uchun ajoyib yordam
  • Kengaytiriladigan: Plaginlar va kengaytmalarning katta ekotizimlari
  • Test qamrovi: Qamrash uchun nyc kabi vositalar bilan yaxshi ishlaydi

Ishlayotgan testlar

# Add to package.json
"scripts": {
  "test": "mocha"
}

# Run tests
npm test

# Run with specific reporter
npx mocha --reporter nyan

# Run with coverage
npx nyc mocha

Vitest

Vitest - bu Vite tomonidan ishlab chiqilgan, Jest bilan mos keladigan, lekin ancha tezroq bo‘lishi uchun mo‘ljallangan, tezkor sinov tizimi.

Ular uchun eng yaxshisi: Vite-dan allaqachon foydalanayotgan loyihalar yoki testni tezroq bajarishga muhtoj bo‘lganlar

Set

npm install -D vitest

Sinov namunasi

// math.test.js
import { describe, it, expect } from 'vitest';
import { sum, divide } from './math.js';

describe('Math Utilities', () => {
  it('should add numbers', () => {
    expect(sum(1, 2)).toBe(3);
  });

  it('should throw error for invalid inputs', () => {
    expect(() => sum('1', 2)).toThrow('Both arguments must be numbers');
  });
});

Asosiy xususiyatlar

  • Blazing Fast: Testni tez bajarish uchun Vite-ning mahalliy ESM-dan foydalanadi
  • Jest bilan mos keladi: Oson migratsiya uchun Jest bilan bir xil API ishlatadi
  • Birinchi darajali TypeScript-ni qo‘llab-quvvatlash: TypeScript bilan qutidan tashqarida ajoyib ishlaydi
  • ESM First: ES modullari uchun mahalliy yordam
  • Tomosha rejimi: Aqlli sinov filtriga ega super tezkor tomosha rejimi

Taqqoslash jadvali

Framework Zero Config Speed O‘rnatilgan mocklar Code Coverage Eng mos holatlar
Jest ✅ Yes Fast ✅ Yes ✅ O‘rnatilgan Minimal sozlash bilan to‘liq funksionalli testlash
Mocha ❌ No Fast ❌ No (needs Sinon) ❌ Needs nyc Ko‘plab plaginlar bilan moslashuvchan testlash
Vitest ✅ Yes Very Fast ✅ Yes ✅ O‘rnatilgan Vite projects, ESM, TypeScript
Node.js Assert ✅ Yes Very Fast ❌ No ❌ Needs coverage tool Simple projects, no dependencies


W3Schools Pathfinder

Yutuqlaringizni kuzating – bu bepul!