async
देखें अगले परीक्षण async
खत्म सब यह कार्य जब तक शुरू करने के लिए नहीं की अनुमति देगा। async
जोन में कॉलबैक लपेटता है, जहां सभी असीमित कार्य (उदा। setTimeout
) ट्रैक किए जाते हैं। एक बार सभी एसिंक्रोनस कार्य पूरा हो जाने के बाद, async
पूर्ण हो जाता है।
क्या तुमने कभी बाहर कोणीय बाहर जैस्मीन के साथ काम किया है, तो आप done
देखा हो सकता है कॉलबैक
it('..', function(done) {
someAsyncAction().then(() => {
expect(something).toBe(something);
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
का उपयोग करता है (यदि आप webpack उपयोग नहीं कर रहे) परीक्षण करना, फिर कोणीय टेम्पलेट प्राप्त करने के लिए एक XHR अनुरोध करने की जरूरत के लिए होता है , इसलिए घटक का संकलन असीमित होगा। इसलिए हमें परीक्षण जारी रखने का संकल्प होने तक प्रतीक्षा करनी चाहिए।
ग्रेट उत्तर @peeskillet। बस यह सुनिश्चित करने के लिए कि मैं इसे समझता हूं: जब आपके पास इनलाइन टेम्पलेट होता है, तो 'async' आवश्यक नहीं है। जब आप 'templateUrl' का उपयोग कर रहे हैं, तो यह है। हालांकि, 'async' सहित एक इनलाइन-टेम्पलेट घटक "ब्रेक" नहीं होगा। क्या आपको लगता है कि यह कहना सुरक्षित है कि कोई भी प्रत्येक परीक्षण के लिए 'async' का उपयोग करने के लिए डिफ़ॉल्ट हो सकता है? – vincecampanale
@vincecampanale टेम्पलेटउआरएल केवल पहले से कॉन्फ़िगरेशन के दौरान मायने रखता है। इस मामले में आपको 'compileComponents' को कॉल करने की आवश्यकता है। यदि आप यही पूछ रहे हैं तो प्रत्येक परीक्षण पर 'async' का उपयोग करने के साथ इसका कोई लेना-देना नहीं है। जहां तक सुरक्षित है (जब आपको 'compileComponents'' कॉल करना चाहिए, तो देखें [जब मुझे संकलन कॉम्पोनेंट्स कॉल करना है] (https://stackoverflow.com/q/43608398/2587435) –
समझ गया। एक और सवाल: कोणीय सीएलआई उन परीक्षणों को उत्पन्न करता है जो 'पहले से() 'में' fixture.detectChanges() 'को कॉल करते हैं। क्या हर टेस्ट चलाने से पहले हमेशा इस फ़ंक्शन को आमंत्रित करना सबसे अच्छा अभ्यास है? अगर आपको लगता है कि यह असंबंधित है, तो मुझे इसके लिए एसओ पर एक अलग सवाल करने में खुशी होगी। – vincecampanale