TypeScript के लिए ts-mockito: पूर्ण गाइड उदाहरण सहित
1. यह क्या है और क्यों ज़रूरी है
ts-mockito TypeScript में मॉक (mock), स्टब (stub) और स्पाई (spy) बनाने के लिए एक शक्तिशाली लाइब्रेरी है। यह लोकप्रिय Java लाइब्रेरी Mockito से प्रेरित है और Java या Python से आने वाले डेवलपर्स को परिचित API प्रदान करती है। ts-mockito का मुख्य उद्देश्य यूनिट टेस्ट लिखना आसान बनाना है, ताकि टेस्ट किए जा रहे कोड को बाहरी डिपेंडेंसीज जैसे डेटाबेस, HTTP क्लाइंट, फ़ाइल सिस्टम और अन्य सर्विसेज से अलग किया जा सके।
यह क्यों ज़रूरी है? आधुनिक TypeScript एप्लिकेशन में, क्लासेस और फंक्शन अक्सर दूसरे कंपोनेंट्स पर निर्भर होते हैं। मॉक के बिना, ऐसे संबंधों का परीक्षण इंटीग्रेशन टेस्टिंग बन जाता है, जिसके लिए एनवायरनमेंट सेटअप की आवश्यकता होती है। ts-mockito आपको पूर्वनिर्धारित व्यवहार वाले "नकली" ऑब्जेक्ट बनाने और यह जांचने की अनुमति देता है कि कौन से मेथड कॉल हुए और किन आर्गुमेंट्स के साथ। इससे टेस्ट तेज़, नियतात्मक और आसानी से मेंटेन करने योग्य बनते हैं।
लाइब्रेरी Mockito की सभी मुख्य सुविधाओं का समर्थन करती है: mock() के माध्यम से मॉक बनाना, when() और thenReturn() के माध्यम से व्यवहार सेट करना, verify() के माध्यम से कॉल की पुष्टि करना, और spy() के माध्यम से स्पाई के साथ काम करना। ts-mockito पूरी तरह से टाइप की गई है और Jest, Mocha और Jasmine जैसे लोकप्रिय टेस्टिंग फ्रेमवर्क के साथ शानदार ढंग से एकीकृत होती है।
2. इंस्टॉलेशन
ts-mockito की इंस्टॉलेशन npm (Node Package Manager) के माध्यम से की जाती है। अपने प्रोजेक्ट की रूट डायरेक्टरी में निम्न कमांड चलाएँ:
npm install ts-mockito --save-dev
यदि आप yarn का उपयोग कर रहे हैं:
yarn add ts-mockito --dev
लाइब्रेरी की कोई अनिवार्य डिपेंडेंसी नहीं है, सिवाय TypeScript (वर्जन 4.0+) के। इंस्टॉलेशन के बाद, आप टेस्ट फ़ाइलों में आवश्यक फंक्शन इम्पोर्ट कर सकते हैं:
import { mock, when, verify, instance, anything, anyOfClass, deepEqual, spy } from 'ts-mockito';
ध्यान दें: ts-mockito कॉल को इंटरसेप्ट करने के लिए प्रॉक्सी ऑब्जेक्ट का उपयोग करता है। इसका मतलब है कि आप हमेशा "लिपटे" ऑब्जेक्ट के साथ काम करते हैं, न कि क्लास के वास्तविक इंस्टेंस के साथ।
3. त्वरित शुरुआत — न्यूनतम कार्यशील उदाहरण
एक सरल उदाहरण देखते हैं: हमारे पास UserService क्लास है, जो UserRepository पर निर्भर है। हम वास्तविक डेटाबेस का उपयोग किए बिना getUser मेथड का परीक्षण करना चाहते हैं।
// user-repository.ts
export class UserRepository {
async findById(id: number): Promise<{ id: number; name: string } | null> {
// वास्तविक डेटाबेस क्वेरी
return null;
}
}
// user-service.ts
export class UserService {
constructor(private repository: UserRepository) {}
async getUser(id: number): Promise<string> {
const user = await this.repository.findById(id);
if (!user) {
throw new Error('User not found');
}
return `User: ${user.name}`;
}
}
// user-service.spec.ts
import { mock, when, instance, verify, anything } from 'ts-mockito';
import { UserService } from './user-service';
import { UserRepository } from './user-repository';
describe('UserService', () => {
it('should return user name when user exists', async () => {
// 1. रिपॉजिटरी का मॉक बनाएँ
const mockRepository: UserRepository = mock(UserRepository);
// 2. व्यवहार सेट करें: findById(1) कॉल करने पर ऑब्जेक्ट लौटाएँ
when(mockRepository.findById(1)).thenResolve({ id: 1, name: 'Alice' });
// 3. मॉक का वास्तविक इंस्टेंस प्राप्त करें
const repositoryInstance = i पुस्तकालय में भी
GraphQL Java: Java में API बनाने के लिए लाइब्रेरी की संपूर्ण मार्गदर्शिका
TypeScript में ZIP/आर्काइव के साथ काम करना: JSZip और adm-zip के लिए पूर्ण गाइड
C++ में OpenCV से इमेज प्रोसेसिंग: resize और crop करना सीखें
php-ast लाइब्रेरी और xhprof के साथ PHP अनुप्रयोगों की निगरानी