TypeScript टेस्ट में Mock ऑब्जेक्ट्स और Fixtures: शुरुआत से विशेषज्ञ तक

शुरुआती लोगों के लिए ऑनलाइन Python प्रशिक्षक

Python आसानी से सीखें बिना सिद्धांत के बोझ के। स्वचालित जांच के साथ व्यावहारिक कार्य हल करें और ब्राउज़र में सीधे कोड लिखें।

पाठ्यक्रम शुरू करें

परिचय: बिना Mock के टेस्ट — बिना कैफीन की कॉफी जैसे?

\n\n

कल्पना करें: आप TypeScript में एक ऐप बना रहे हैं जो ईमेल भेजता है, डेटाबेस से बात करता है और बाहरी API का उपयोग करता है। आप टेस्ट चलाते हैं — और अचानक सब कुछ फेल हो जाता है क्योंकि मेल सर्वर अस्थायी रूप से डाउन है। परिचित लग रहा है?

\n\n

यहीं पर mock-ऑब्जेक्ट्स (नकली ऑब्जेक्ट्स) और fixtures (टेस्ट डेटा) काम आते हैं। ये आपके कोड को बाहरी दुनिया से अलग करते हैं और टेस्ट को तेज़, विश्वसनीय और अनुमानित बनाते हैं। इस लेख में हम वास्तविक उदाहरणों के साथ सीखेंगे कि TypeScript में mock का सही उपयोग कैसे करें, TypeScript के लिए fixtures क्या होते हैं और गलतियों से कैसे बचें।

\n\n

यह लेख PythonLib के लिए लिखा गया है — एक शैक्षिक पोर्टल जहाँ हम गुणवत्तापूर्ण कोड लिखना सिखाते हैं। चलिए शुरू करते हैं!

\n\n

Mock ऑब्जेक्ट्स और Fixtures क्या हैं?

\n\n

Mock ऑब्जेक्ट्स: आपके कोड में स्टंट डबल्स

\n\n

Mock ऑब्जेक्ट (या सिर्फ mock) एक वास्तविक ऑब्जेक्ट का विकल्प है जो उसके व्यवहार की नकल करता है। आप कहते हैं: "जब sendEmail() मेथड कॉल हो, तो true लौटाओ"। और टेस्ट असली ईमेल सर्वर को नहीं छूता।

\n\n

TypeScript में, mock आमतौर पर Jest या Vitest लाइब्रेरीज़ के साथ बनाए जाते हैं। ये आपको जाँचने देते हैं कि मेथड कॉल हुआ या नहीं, किन आर्गुमेंट्स के साथ और कितनी बार।

\n\n

Fixtures: टेस्ट के लिए तैयार डेटा

\n\n

Fixtures पहले से तैयार डेटा सेट होते हैं। जैसे, एक यूज़र ऑब्जेक्ट, ऑर्डर की लिस्ट या ऐप कॉन्फ़िगरेशन। हर बार मैन्युअली डेटा बनाने के बजाय, आप fixtures को अलग फ़ाइलों में स्टोर करते हैं।

\n\n

mock + fixture का कॉम्बिनेशन 2024 में TypeScript टेस्टिंग का मानक है।

\n\n

प्रैक्टिस: Mock और Fixtures के साथ टेस्ट लिखना

\n\n

एनवायरनमेंट सेटअप

\n\n

उदाहरणों के लिए हम Jest का उपयोग करेंगे (हालाँकि यह सब Vitest में भी काम करता है)। सुनिश्चित करें कि आपने डिपेंडेंसीज़ इंस्टॉल कर ली हैं:

\n\n
npm install --save-dev jest @types/jest ts-jest
\n\n

jest.config.js में यह जोड़ें:

\n\n
module.exports = {\n  preset: 'ts-jest',\n  testEnvironment: 'node',\n};
\n\n

उदाहरण 1: ईमेल भेजने वाले सर्विस का Mock

\n\n

मान लीजिए हमारे पास एक नोटिफिकेशन सर्विस है:

\n\n
// notificationService.ts\nexport class EmailService {\n  async sendEmail(to: string, subject: string, body: string): Promise<boolean> {\n    // असली भेजने का कोड — हम इसे नहीं छेड़ेंगे\n    return true;\n  }\n}\n\nexport class NotificationManager {\n  constructor(private emailService: EmailService) {}\n\n  async notifyUser(email: string, message: string): Promise<string> {\n    const result = await this.emailService.sendEmail(email, 'सूचना', message);\n    return result ? 'भेजा गया' : 'त्रुटि';\n  }\n}
\n\n

अब mock-ऑब्जेक्ट के साथ टेस्ट लिखते हैं:

\n\n
// notificationService.test.ts\nimport { NotificationManager, EmailService } from './notificationService';\n\ndescribe('NotificationManager', () => {\n  it('सूचना भेजकर "भेजा गया" लौटाना चाहिए', async () => {\n    // Mock बनाएँ\n    const mockEmailService: jest.Mocked<EmailService> = {\n      sendEmail: jest.fn().mockResolvedValue(true),\n    };\n\n    const manager = new NotificationManager(mockEmailService);\n    const result = await manager.notifyUser('test@test.com', 'नमस्ते!');\n\n    expect(result).toBe('भेजा गया');\n    expect(mockEmailService.sendEmail).toHaveBeenCalledWith(\n      'test@test.com',\n      'सूचना',\n      'नमस्ते!'\n    );\n  });\n\n  it('भेजने में विफलता पर "त्रुटि" लौटाना चाहिए', async () => {\n    const mockEmailService: jest.Mocked<EmailService> = {\n      sendEmail: jest.fn().mockResolvedValue(false),\n    };\n\n    const manager = new NotificationManager(mockEmailService);                

ब्लॉग

पुस्तक अनुशंसाएँ