asyncअगले परीक्षण को तब तक शुरू करने की अनुमति नहीं देगा जब तक कि asyncइसके सभी कार्य समाप्त नहीं हो जाते। क्या asyncकरता है कॉलबैक को एक ज़ोन में लपेटें, जहां सभी अतुल्यकालिक कार्यों (जैसे setTimeout) को ट्रैक किया जाता है। एक बार जब सभी अतुल्यकालिक कार्य पूरे हो जाते हैं, तो asyncपूरा हो जाता है।
यदि आपने कभी भी जैस्मीन के साथ कोणीय के बाहर काम किया है, तो आपने doneकॉलबैक में पास होते हुए देखा होगा
it('..', function(done) {
someAsyncAction().then(() => {
expect(something).toBe(something);
done();
});
});
यहां, यह मूल जैस्मीन है, जहां हम जैस्मीन को बताते हैं कि इस परीक्षण को पूरा होने में देरी होनी चाहिए done()। अगर हमने फोन नहीं किया done()और इसके बजाय यह किया:
it('..', function() {
someAsyncAction().then(() => {
expect(something).toBe(something);
});
});
परीक्षण अपेक्षा से पहले भी पूरा हो जाएगा, क्योंकि परीक्षण के समकालिक कार्यों को पूरा करने के बाद वादा हल हो जाता है।
कोणीय (एक जैस्मीन वातावरण में) के साथ, कोणीय वास्तव doneमें पर्दे के पीछे कॉल करेगा जब हम उपयोग करते हैं async। यह ज़ोन में सभी अतुल्यकालिक कार्यों का ट्रैक रखेगा, और जब वे सभी समाप्त हो doneजाएंगे , तो उन्हें पर्दे के पीछे बुलाया जाएगा।
TestBedकॉन्फ़िगरेशन के साथ आपके विशेष मामले में , आप इसका उपयोग आम तौर पर तब करते हैं जब आप चाहते हैं compileComponents। मैं शायद ही कभी ऐसी स्थिति में भागता हूं जिसमें मुझे इसे अन्यथा कहना होगा
beforeEach(async(() => {
TestBed.configureTestingModule({
declarations: [MyModule],
schemas: [NO_ERRORS_SCHEMA],
})
.compileComponent().then(() => {
fixture = TestBed.createComponent(TestComponent);
});
}));
एक घटक का परीक्षण करते हैं जो उपयोग करता है templateUrl(यदि आप वेबपैक का उपयोग नहीं कर रहे हैं), तो कोणीय को टेम्पलेट प्राप्त करने के लिए XHR अनुरोध करने की आवश्यकता होती है, इसलिए घटक का संकलन अतुल्यकालिक होगा। इसलिए हमें परीक्षण जारी रखने से पहले हल करने तक इंतजार करना चाहिए।
asyncतो यह आवश्यक नहीं है। जब आप उपयोग कर रहे हैंtemplateUrl, यह है। हालाँकि,asyncइनलाइन-टेम्पलेट घटक को "ब्रेक" नहीं करेगा। क्या आपको लगता है कि यह कहना सुरक्षित है किasyncहर परीक्षा के लिए एक डिफ़ॉल्ट का उपयोग किया जा सकता है ?