सर्विस और निर्भरताओं का मॉक बनाना
DI के माध्यम से परीक्षण विकल्प उपलब्ध कराएँ
सर्विस और निर्भरताओं का मॉक बनाना, CoddyKit पर Angular Academy का एक निःशुल्क पाठ है। यह 4 में से 3वाँ पाठ है। इस अध्ययन पथ के 3 तक कोई भी पाठ पूरा पढ़ना निःशुल्क है — इसके बाद CoddyKit PRO हर पाठ अनलॉक करता है, साथ ही अंतर्निर्मित कोड संपादक और चौबीसों घंटे एआई शिक्षक के साथ व्यावहारिक अभ्यास भी उपलब्ध कराता है। यह Angular Academy सीखने के मार्ग का हिस्सा है और आपकी प्रगति वेब तथा CoddyKit ऐप पर सिंक होती रहती है। Angular Academy पाठ्यक्रम में कुल 4 पाठ शामिल हैं।
निर्भरताओं की नक़ल क्यों करें
कंपोनेंट परीक्षण को कंपोनेंट तक सीमित रखना चाहिए। यदि वह HttpClient-आधारित सेवा इंजेक्ट करता है, तो आप वास्तविक नेटवर्क कॉल नहीं करना चाहेंगे। इसके बजाय test double दें: ऐसा नकली ऑब्जेक्ट जो नियंत्रित डेटा लौटाए, ताकि परीक्षण तेज़ और नियतात्मक रहें।
useValue से नकली सेवा देना
सबसे सरल नकली सेवा एक साधारण ऑब्जेक्ट है, जिसे useValue के साथ दिया जाता है। इसे उसी injection token के अंतर्गत दें जिसे कंपोनेंट माँगता है।
const fakeApi = { getUser: () => of({ name: 'Ada' }) };
TestBed.configureTestingModule({
imports: [ProfileComponent],
providers: [{ provide: UserApi, useValue: fakeApi }],
});Jasmine Spies
jasmine.createSpyObj spy methods वाला नकली ऑब्जेक्ट बनाता है, जिससे आप लौटाए गए मानों को नियंत्रित करने और कॉल की जाँच—दोनों कर सकते हैं।
const apiSpy = jasmine.createSpyObj<UserApi>('UserApi', ['getUser']);
apiSpy.getUser.and.returnValue(of({ name: 'Ada' }));
TestBed.configureTestingModule({
providers: [{ provide: UserApi, useValue: apiSpy }],
});सेवा को कॉल किए जाने की जाँच
कंपोनेंट पर कार्रवाई करने के बाद जाँचें कि spy को अपेक्षित arguments मिले हैं।
fixture.componentInstance.load(7);
fixture.detectChanges();
expect(apiSpy.getUser).toHaveBeenCalledWith(7);
expect(apiSpy.getUser).toHaveBeenCalledTimes(1);Mocks से Observables लौटाना
सेवाएँ अक्सर Observables लौटाती हैं। समकालिक सफलता के लिए RxJS of() और विफलताओं के लिए throwError() का उपयोग करें, ताकि आप दोनों शाखाओं का परीक्षण कर सकें।
import { of, throwError } from 'rxjs';
apiSpy.getUser.and.returnValue(of({ name: 'Ada' })); // success
apiSpy.getUser.and.returnValue(throwError(() => new Error('boom'))); // errorपुनः उपयोग योग्य नकली सेवाओं के लिए useClass
जब किसी नकली सेवा का कई specs में पुनः उपयोग हो, तो एक class परिभाषित करें और उसे useClass के साथ जोड़ें।
class FakeUserApi {
getUser() { return of({ name: 'Test' }); }
}
TestBed.configureTestingModule({
providers: [{ provide: UserApi, useClass: FakeUserApi }],
});HttpTestingController से HttpClient की नक़ल
पूरी सेवा को नकली बनाए बिना HTTP कॉल करने वाली सेवाओं का परीक्षण करने के लिए provideHttpClientTesting() इंपोर्ट करें और HttpTestingController के ज़रिए अनुरोधों को पूरा करें।
import { provideHttpClient } from '@angular/common/http';
import { provideHttpClientTesting, HttpTestingController } from '@angular/common/http/testing';
TestBed.configureTestingModule({
providers: [provideHttpClient(), provideHttpClientTesting()],
});HTTP अनुरोध पूरा करना
किसी अनुरोध की अपेक्षा करें, नकली डेटा से उसका उत्तर दें, फिर सुनिश्चित करें कि कोई अप्रत्याशित कॉल बाकी न रहे।
const http = TestBed.inject(HttpTestingController);
service.load();
const req = http.expectOne('/api/users/7');
expect(req.request.method).toBe('GET');
req.flush({ name: 'Ada' });
http.verify();हर विनिर्देश के लिए प्रोवाइडर को ओवरराइड करना
कभी-कभी किसी एक परीक्षण के लिए अलग नकली ऑब्जेक्ट की ज़रूरत होती है। createComponent से पहले TestBed.overrideProvider() का उपयोग करें।
TestBed.overrideProvider(UserApi, {
useValue: { getUser: () => throwError(() => new Error('fail')) },
});
const fixture = TestBed.createComponent(ProfileComponent);जितना आवश्यक हो उतना ही नकली बनाएँ
एक अच्छा डबल केवल वही मेथड लागू करता है जिनका कंपोनेंट वास्तव में उपयोग करता है। जरूरत से ज़्यादा मॉकिंग आपके परीक्षण को आंतरिक विवरणों से जोड़ देती है; बहुत कम मॉकिंग से वास्तविक साइड इफ़ेक्ट बाहर आ सकते हैं। कंपोनेंट जिस सार्वजनिक अनुबंध पर निर्भर करता है, उसी से मेल रखें।
वास्तविक सेवा के मेथड पर स्पाइ करें
आप वास्तविक सेवा को बनाए रखते हुए spyOn(instance, 'method') की मदद से किसी एक मेथड पर स्पाइ भी कर सकते हैं। यह तब उपयोगी है जब सेवा का अधिकांश भाग harmless हो, लेकिन किसी एक कॉल को रोकना आवश्यक हो।
const svc = TestBed.inject(AnalyticsService);
spyOn(svc, 'track');
fixture.componentInstance.onClick();
expect(svc.track).toHaveBeenCalledWith('click');त्वरित जाँच
आप नकली ऑब्जेक्ट से कॉल की पुष्टि करने और लौटाए जाने वाले मानों को नियंत्रित करने, दोनों का काम कैसे कराएँगे?
पुनरावलोकन
आपने useValue, useClass और Jasmine स्पाइज़ का उपयोग करके वास्तविक निर्भरताओं को डबल से बदला; of/throwError से Observable लौटाए; HttpTestingController के ज़रिए HTTP का परीक्षण किया; और हर विनिर्देश के लिए प्रोवाइडर को ओवरराइड किया। केवल उसी अनुबंध का मॉक बनाएँ जिसका कंपोनेंट उपयोग करता है।
एआई शिक्षक के साथ HTML सीखें — निःशुल्क
अपने ब्राउज़र में वास्तविक कोड लिखें और चलाएँ, चौबीसों घंटे एआई शिक्षक से तुरंत सहायता पाएँ, और वेब या ऐप पर वहीं से शुरू करें जहाँ आपने छोड़ा था।
- पाठ्यक्रम
- 38
- पाठ
- 144
अक्सर पूछे जाने वाले प्रश्न
क्या “सर्विस और निर्भरताओं का मॉक बनाना” पाठ निःशुल्क है?
हाँ — Angular Academy अध्ययन पथ के 3 तक कोई भी पाठ, जिसमें “सर्विस और निर्भरताओं का मॉक बनाना” भी शामिल है, यहाँ वेब पर पूरा पढ़ना निःशुल्क है। इसके बाद CoddyKit PRO हर पाठ अनलॉक करता है, साथ ही अंतर्निर्मित कोड संपादक और चौबीसों घंटे एआई शिक्षक के साथ इंटरैक्टिव अभ्यास भी उपलब्ध कराता है। Angular Academy पाठ्यक्रम में कुल 4 पाठ शामिल हैं।
“सर्विस और निर्भरताओं का मॉक बनाना” में मैं क्या सीखूँगा?
DI के माध्यम से परीक्षण विकल्प उपलब्ध कराएँ आप ब्राउज़र में सीधे चलाए जाने वाले व्यावहारिक कोड के साथ Angular Academy का अभ्यास करते हैं, और पाठ पूरा करते समय 24/7 एआई ट्यूटर आपके प्रश्नों के उत्तर देता है।
क्या Angular Academy शुरू करने के लिए मुझे किसी अनुभव की आवश्यकता है?
पहले के अनुभव की आवश्यकता नहीं है। CoddyKit पर Angular Academy शुरुआती से लेकर उन्नत शिक्षार्थियों तक सभी के लिए व्यवस्थित किया गया है, इसलिए आप यहीं से या शुरुआत से सीखना शुरू कर सकते हैं और अपनी गति से आगे बढ़ सकते हैं। यह 4 में से 3वाँ पाठ है।
“सर्विस और निर्भरताओं का मॉक बनाना” पाठ पूरा करने में कितना समय लगता है?
CoddyKit का अधिकांश पाठ लगभग 5–10 मिनट में पूरा हो जाता है। हर पाठ छोटा और संवादात्मक है, इसलिए आप लगातार प्रगति करते हैं और वेब या ऐप पर वहीं से सीखना जारी रख सकते हैं जहाँ आपने छोड़ा था।
क्या मैं इस Angular Academy पाठ में कोड लिख और चला सकता हूँ?
हाँ। हर Angular Academy पाठ में एक अंतर्निर्मित कोड संपादक शामिल है, जिससे आप सीधे अपने ब्राउज़र में वास्तविक कोड लिख और चला सकते हैं और तुरंत एआई प्रतिक्रिया पा सकते हैं—स्थानीय सेटअप की आवश्यकता नहीं है।
इस पाठ्यक्रम के सभी पाठ
- TestBed और कंपोनेंट फ़िक्स्चर
- इनपुट, आउटपुट और DOM का परीक्षण
- सर्विस और निर्भरताओं का मॉक बनाना
- सिग्नल और असिंक्रोनस कोड का परीक्षण