angular - कोणीय 2 परीक्षण-जब उपयोग करने के लिए Async फ़ंक्शन कॉल-




unit-testing karma-jasmine (2)

जब आप अपने परीक्षण में एक async कॉल करते हैं तो async कॉल पूरा होने से पहले वास्तविक परीक्षण फ़ंक्शन पूरा हो जाता है। जब आपको कॉल पूरा होने पर (जो आमतौर पर मामला है) कुछ राज्य को सत्यापित करने की आवश्यकता होती है, तब परीक्षण ढांचा परीक्षण को पूर्ण होने के रूप में रिपोर्ट करेगा जबकि अभी भी async काम चल रहा है।

async(...) का उपयोग करने के साथ, आप परीक्षण रूपरेखा को यह बताते हैं कि परीक्षण पूरा होने से पहले वापसी का वादा या अवलोकन पूरा होने तक प्रतीक्षा करें।

it('should show quote after getQuote promise (async)', async(() => {
  fixture.detectChanges();

  fixture.whenStable().then(() => { // wait for async getQuote
    fixture.detectChanges();        // update view with quote
    expect(el.textContent).toBe(testQuote);
  });
}));

then(...) को दिया गया कोड परीक्षण कार्य पूरा होने के बाद निष्पादित किया जाएगा। async() आप परीक्षण ढांचे को अवगत कराते हैं, कि उसे परीक्षण पूरा करने से पहले वादों और वेधशालाओं के पूरा होने की प्रतीक्षा करनी चाहिए।

यह भी देखें

जब आप Angular 2 में परीक्षण करते हैं तो आप TestBed में Async फ़ंक्शन का उपयोग कब करते हैं?

आप इसका उपयोग कब करते हैं?

 beforeEach(() => {
        TestBed.configureTestingModule({
            declarations: [MyModule],
            schemas: [NO_ERRORS_SCHEMA],
        });
    });

और आप इसका उपयोग कब करते हैं?

beforeEach(async(() => {
    TestBed.configureTestingModule({
        declarations: [MyModule],
        schemas: [NO_ERRORS_SCHEMA],
    });
}));

क्या कोई मुझे इस पर प्रकाश डाल सकता है?


जब तक async अपने सभी कार्यों को पूरा नहीं करता तब तक async अगला परीक्षण शुरू नहीं होने देगा। async करता है कॉलबैक को एक ज़ोन में लपेटता है, जहाँ सभी अतुल्यकालिक कार्य (जैसे setTimeout ) ट्रैक किए जाते हैं। एक बार जब सभी एसिंक्रोनस कार्य पूरे हो जाते हैं, तो एसिंक्रोन पूरा हो जाता है।

अगर आपने कभी भी जैस्मीन के साथ कोणीय के बाहर काम किया है, तो आपने कॉलबैक में पास होते हुए देखा होगा

it('..', function(done) {
  someAsyncAction().then(() => {
    expect(something).toBe(something);
    done();
  });
});

यहां, यह मूल जैस्मीन है, जहां हम जैस्मीन को बताते हैं कि जब तक हम कॉल नहीं करते हैं तब तक यह परीक्षण पूरा होने में देरी होनी चाहिए। यदि हमने कॉल नहीं done() और इसके बजाय यह किया है:

it('..', function() {
  someAsyncAction().then(() => {
    expect(something).toBe(something);
  });
});

परीक्षण अपेक्षा से पहले भी पूरा हो जाएगा, क्योंकि परीक्षण के समकालिक कार्यों को पूरा करने के बाद वादा हल हो जाता है।

कोणीय (एक जैस्मीन वातावरण में) के साथ, वास्तव में जब हम async उपयोग करते हैं तो कोणीय को पर्दे के पीछे done जाएगा। यह ज़ोन में सभी अतुल्यकालिक कार्यों का ट्रैक रखेगा, और जब वे सभी समाप्त हो जाएंगे, तो done को पर्दे के पीछे कहा जाएगा।

TestBed कॉन्फ़िगरेशन के साथ आपके विशेष मामले में, आप आमतौर पर इसका उपयोग तब करेंगे जब आप compileComponents करना compileComponents । मैं शायद ही कभी ऐसी स्थिति में भागता हूं जिसमें मुझे इसे अन्यथा कहना होगा

beforeEach(async(() => {
   TestBed.configureTestingModule({
     declarations: [MyModule],
     schemas: [NO_ERRORS_SCHEMA],
   })
   .compileComponent().then(() => {
      fixture = TestBed.createComponent(TestComponent);
   });
}));

एक घटक का परीक्षण करते समय जो templateUrl यूआरएल का उपयोग करता templateUrl (यदि आप वेबपैक का उपयोग नहीं कर रहे हैं), तो कोणीय को टेम्पलेट प्राप्त करने के लिए एक्सएचआर अनुरोध करने की आवश्यकता होती है, इसलिए घटक का संकलन अतुल्यकालिक होगा। इसलिए हमें परीक्षण जारी रखने से पहले हल करने तक इंतजार करना चाहिए।





angular-test