Jest क्या है और इसकी आवश्यकता क्यों है?
Jest एक शक्तिशाली और लोकप्रिय JavaScript टेस्टिंग फ्रेमवर्क है, जिसे Facebook (Meta) द्वारा विकसित किया गया है। यह यूनिट टेस्ट, इंटीग्रेशन टेस्ट और एंड-टू-एंड टेस्ट लिखने के लिए सब कुछ 'बॉक्स से बाहर' प्रदान करता है: एसर्शन (assertions), मॉकिंग (mocking), स्पाइज़ (spies), टाइमर, और कोड कवरेज (code coverage) मापने का बिल्ट-इन टूल।
Jest का उपयोग React इकोसिस्टम में व्यापक रूप से किया जाता है, लेकिन यह किसी भी JavaScript कोड के परीक्षण के लिए बढ़िया है, जिसमें Node.js, Angular, Vue.js और अन्य फ्रेमवर्क पर बने ऐप्लिकेशन शामिल हैं।
Jest की आवश्यकता क्यों है?
- ऑटोमेटेड जाँच: हर बदलाव के बाद यह जाँचना कि आपका कोड सही तरीके से काम कर रहा है या नहीं।
- रेग्रेशन रोकथाम: टेस्ट यह सुनिश्चित करने में मदद करते हैं कि नया कोड पुरानी कार्यक्षमता को न तोड़े।
- डॉक्यूमेंटेशन: अच्छी तरह से लिखे गए टेस्ट लाइव डॉक्यूमेंटेशन का काम करते हैं, जो बताते हैं कि हर फंक्शन या मॉड्यूल को कैसे काम करना चाहिए।
- रीफैक्टरिंग में आत्मविश्वास: टेस्ट होने से आप सुरक्षित रूप से कोड को फिर से लिख और बेहतर बना सकते हैं।
- आसान सेटअप: Jest बिना किसी जटिल कॉन्फ़िगरेशन के 'बॉक्स से बाहर' काम करता है।
Jest की स्थापना (Installation)
Jest को पैकेज मैनेजर npm या yarn के माध्यम से इंस्टॉल किया जाता है। Node.js प्रोजेक्ट के लिए यह मानक तरीका है।
# dev-डिपेंडेंसी के रूप में इंस्टॉल करें (अनुशंसित)
npm install --save-dev jest
# या yarn का उपयोग करके
yarn add --dev jest
इंस्टॉलेशन के बाद, अपने package.json में टेस्ट चलाने के लिए स्क्रिप्ट जोड़ें:
{
"scripts": {
"test": "jest",
"test:watch": "jest --watch", // वॉच मोड में चलाएँ
"test:coverage": "jest --coverage" // कवरेज रिपोर्ट के साथ चलाएँ
}
}
अब आप npm test कमांड से टेस्ट चला सकते हैं।
कोड उदाहरण के साथ त्वरित शुरुआत
मान लीजिए, हमारे पास गणितीय संक्रियाओं के लिए एक सरल मॉड्यूल math.js है:
// math.js
function add(a, b) {
return a + b;
}
function subtract(a, b) {
return a - b;
}
module.exports = { add, subtract };
अब एक टेस्ट फ़ाइल math.test.js बनाएँ (Jest डिफ़ॉल्ट रूप से .test.js या .spec.js एक्सटेंशन वाली फ़ाइलें ढूँढता है):
// math.test.js
const { add, subtract } = require('./math');
test('adds 1 + 2 to equal 3', () => {
expect(add(1, 2)).toBe(3);
});
test('subtracts 5 - 3 to equal 2', () => {
expect(subtract(5, 3)).toBe(2);
});
टेस्ट चलाएँ:
npm test
आप कंसोल में टेस्ट पास होने की रिपोर्ट देखेंगे। अगर सब कुछ सही है, तो दोनों टेस्ट हरे ✓ से चिह्नित होंगे।
Jest के मुख्य तरीके और फंक्शन
Jest एक समृद्ध API प्रदान करता है। आइए 10 प्रमुख तरीकों पर नज़र डालें जो आपके 90% कार्यों को कवर करेंगे।
1. test(name, fn, timeout) / it(name, fn, timeout)
क्या करता है: एक नया टेस्ट परिभाषित करता है। test और it समानार्थी हैं। आप किसी का भी उपयोग कर सकते हैं।
पैरामीटर:
name(string) — टेस्ट का नाम, जो रिपोर्ट में दिखाई देगा।fn(function) — फंक्शन जिसमें टेस्ट का लॉजिक (एसर्शन) होता है।timeout(number, वैकल्पिक) — टेस्ट के लिए प्रतीक्षा समय मिलीसेकंड में (डिफ़ॉल्ट 5000)।
उदाहरण:
test('दो जमा दो बराबर चार', () => {
expect(2 + 2).toBe(4);
});
it('स्ट्रिंग "hello" की लंबाई 5 है', () => {
expect('hello').toHaveLength(5);
});
2. describe(name, fn)
क्या करता है: संबंधित टेस्ट को एक साथ समूहित करता है। इससे टेस्ट रिपोर्ट को पढ़ना और व्यवस्थित करना आसान हो जाता है।
पैरामीटर:
name(string) — टेस्ट समूह का नाम।fn(function) — एक फंक्शन जिसमें एक या अधिकtestयाitब्लॉक होते हैं।
उदाहरण:
describe('गणित मॉड्यूल', () => {
test('जोड़ फंक्शन', () => {
expect(add(1, 2)).toBe(3);
});
test('घटाव फंक्शन', () => {
expect(subtract(5, 3)).toBe(2);
});
});
3. expect(value)
क्या करता है: Jest का मुख्य एसर्शन फंक्शन। यह एक 'expectation' ऑब्जेक्ट लौटाता है जिस पर आप मैचर्स (जैसे toBe, toEqual) लागू कर सकते हैं।
उदाहरण:
test('expect का उपयोग', () => {
expect(2 + 2).toBe(4);
expect({ a: 1 }).toEqual({ a: 1 });
});
4. toBe(value)
क्या करता है: सख्त समानता (===) की जाँच करता है। प्रिमिटिव वैल्यू (नंबर, स्ट्रिंग, बूलियन) की तुलना के लिए उपयोग करें।
उदाहरण:
test('toBe उदाहरण', () => {
expect(1 + 1).toBe(2);
expect('hello').toBe('hello');
});
5. toEqual(value)
क्या करता है: ऑब्जेक्ट और ऐरे की गहरी समानता (deep equality) की जाँच करता है। ऑब्जेक्ट या ऐरे की तुलना के लिए उपयोग करें।
उदाहरण:
test('toEqual उदाहरण', () => {
const data = { one: 1, two: 2 };
expect(data).toEqual({ one: 1, two: 2 });
const arr = [1, 2, 3];
expect(arr).toEqual([1, 2, 3]);
});
6. toBeTruthy() और toBeFalsy()
क्या करता है: toBeTruthy() जाँचता है कि वैल्यू 'truthy' है (यानी, बूलियन संदर्भ में true के समान व्यवहार करती है)। toBeFalsy() जाँचता है कि वैल्यू 'falsy' है (false, 0, '', null, undefined, NaN)।
उदाहरण:
test('truthy और falsy', () => {
expect('hello').toBeTruthy();
expect(0).toBeFalsy();
expect(null).toBeFalsy();
});
7. toContain(item)
क्या करता है: जाँचता है कि ऐरे या स्ट्रिंग में कोई विशिष्ट आइटम या सबस्ट्रिंग मौजूद है या नहीं।
उदाहरण:
test('toContain उदाहरण', () => {
const shoppingList = ['दूध', 'ब्रेड', 'अंडे'];
expect(shoppingList).toContain('दूध');
expect('Hello World').toContain('World');
});
8. toHaveLength(number)
क्या करता है: जाँचता है कि ऐरे या स्ट्रिंग की लंबाई निर्दिष्ट संख्या के बराबर है या नहीं।
उदाहरण:
test('toHaveLength उदाहरण', () => {
expect([1, 2, 3]).toHaveLength(3);
expect('abc').toHaveLength(3);
});
9. toThrow(error?)
क्या करता है: जाँचता है कि फंक्शन को कॉल करने पर कोई एरर थ्रो होता है या नहीं। आप विशिष्ट एरर मैसेज या एरर टाइप भी जाँच सकते हैं।
उदाहरण:
function throwError() {
throw new Error('कुछ गलत हो गया!');
}
test('toThrow उदाहरण', () => {
expect(() => throwError()).toThrow();
expect(() => throwError()).toThrow('कुछ गलत हो गया!');
expect(() => throwError()).toThrow(Error);
});
10. beforeEach(fn, timeout) और afterEach(fn, timeout)
क्या करता है: beforeEach प्रत्येक टेस्ट से पहले एक सेटअप फंक्शन चलाता है। afterEach प्रत्येक टेस्ट के बाद एक क्लीनअप फंक्शन चलाता है। यह डेटाबेस कनेक्शन या मॉक को रीसेट करने के लिए उपयोगी है।
उदाहरण:
let data;
beforeEach(() => {
data = { count: 0 };
});
afterEach(() => {
// क्लीनअप कोड, जैसे मॉक को रीसेट करना
jest.clearAllMocks();
});
test('count बढ़ाएँ', () => {
data.count += 1;
expect(data.count).toBe(1);
});
test('count रीसेट', () => {
expect(data.count).toBe(0); // beforeEach के कारण यह 0 है
});
निष्कर्ष
Jest एक शक्तिशाली और उपयोग में आसान टेस्टिंग फ्रेमवर्क है जो आपके JavaScript प्रोजेक्ट्स की गुणवत्ता और विश्वसनीयता को बढ़ाता है। इस गाइड में दिए गए तरीकों और उदाहरणों के साथ, आप आत्मविश्वास से अपने कोड के लिए टेस्ट लिखना शुरू कर सकते हैं। अधिक जानकारी के लिए आधिकारिक Jest दस्तावेज़ देखें।