Test freymvorklari
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!
