2015-06-13 27 views
10

के साथ आयनिक लोडिंग संवाद की प्रतीक्षा कर रहे हैं समान प्रश्न हैं (नीचे लिंक किए गए हैं) लेकिन कोई भी इस समस्या को हल नहीं करता है। मैं एक आयनिक परियोजना के लिए प्रोटैक्टर परीक्षण लिख रहा हूं। मुझे कभी-कभी परीक्षण निष्पादित करने की आवश्यकता होती है जब एक आयनिक लोडिंग संवाद प्रकट होता है और गायब हो जाता है।प्रोटैक्टर

मैंने ऐप की नंगे हड्डियों और परीक्षणों की आवश्यकता के साथ एक रेपो बनाया है। इसे हल करें और आप समस्या को हल करें (मैं नीचे दी गई समस्या का वर्णन करता हूं): https://github.com/TmanTman/StackoverflowQ। Conf.js. में अपने सिस्टम के लिए बस अपने क्रोम के पथ को अनुकूलित करें।

एक अतुल्यकालिक आयोनिक लोड हो रहा है संवाद मैं सिर्फ एक खाली आयोनिक परियोजना में नियंत्रक में जोड़ने के अनुकरण के लिए:

$interval(function() { 
     $ionicLoading.show({ 
      template: 'Async ionicLoading', 
      duration: 5000 
     }); 
     }, 5000 , 1); 
    }) 

मैं, संवाद प्रकट करने के लिए के लिए प्रतीक्षा करने चांदा मिल कुछ परीक्षण करते हैं, के लिए प्रतीक्षा करने की जरूरत है गायब होने के लिए संवाद, और फिर कुछ और परीक्षण करें। मेरी टेस्ट फाइल में मेरा नवीनतम प्रयास है:

it('should only test when ionicLoading appears', function() { 
    browser.wait(function(){ 
    return element(by.css('.loading-container.visible.active')).isPresent(); 
    }, 10000); 
    var ionicLoadingText = element(by.css('.loading-container.visible.active')).getText(); 
    expect(ionicLoadingText).toEqual('Async IonicLoading'); 
}) 



it('should only test once ionicLoading disappears', function() { 
    browser.wait(function() { 
    var deferred = protractor.promise.defer(); 
    var q = element(by.css('.loading-container.visible.active')).isPresent() 
     q.then(function (isPresent) { 
     deferred.fulfill(!isPresent); 
     }); 
     return deferred.promise; 
    }); 
    expect(1).toEqual(1); 
}) 

मैं सिंक्रोनस नींद फ़ंक्शन का उपयोग करने से बचने की कोशिश कर रहा हूं, क्योंकि मेरा कोड अत्यधिक असीमित है। मैंने अनगिनत विविधताओं की कोशिश की है लेकिन मैं इसे काम नहीं कर सकता। लिंक मैं जानकारी के लिए उपयोग किया है में शामिल हैं:

+1

आपके पास क्या त्रुटियां हैं? क्या संवाद से पहले पहले ब्लॉक में उम्मीद निष्पादित होती है या क्या टाइमआउट त्रुटि होती है? – Dziamid

+1

पहले ब्लॉक पर टाइमआउट त्रुटि: "असफल: 10472ms के बाद समय समाप्त हो गया"। –

उत्तर

6

समस्या दो गुना है:

1) मैं क्या यह मान सकते हैं से, $ ionicLoading विधि की अवधि संपत्ति एक टाइमआउट फ़ंक्शन के साथ कार्यान्वित की जाती है। प्रोटैक्टर $ टाइमआउट के साथ अच्छी तरह से काम नहीं करता है। तो अवधि संपत्ति का उपयोग कर के बजाय, $ ionicLoading संवाद एक $ अंतराल कॉल (अनुकूल सवाल से कोड) के साथ छिपा हो सकता है:

$interval(function() { 
     $ionicLoading.show({ 
      template: 'Async IonicLoading' 
     }); 
     $interval(function() { 
     $ionicLoading.hide(); 
     }, 5000, 1) 
    }, 5000 , 1); 

2) अतुल्यकालिक परिवर्तन का पता लगाने के कोड निम्नलिखित है:

it('should only test when ionicLoading appears', function() { 
    browser.wait(function() { 
     var deferred = protractor.promise.defer(); 
     var q = element(by.css('.loading-container.visible.active')).isPresent() 
     q.then(function (isPresent) { 
      deferred.fulfill(isPresent); 
     }); 
     return deferred.promise; 
    }, 10000); 
     var ionicLoadingText = element(by.css('.loading-container.visible.active')).getText(); 
     expect(ionicLoadingText).toEqual('Async IonicLoading'); 
    }) 

    it('should only test once ionicLoading disappears', function() { 
     browser.wait(function() { 
     var deferred = protractor.promise.defer(); 
     var q = element(by.css('.loading-container.visible.active')).isPresent() 
      q.then(function (isPresent) { 
      deferred.fulfill(!isPresent); 
      }); 
      return deferred.promise; 
     }, 10000); 
     expect(1).toEqual(1); 
    }) 

फिर दोनों परीक्षण पास हो जाते हैं।

+1

अच्छा पकड़ो! ionicLoading.duration [$ टाइमआउट का उपयोग करता है] (https://github.com/driftyco/ionic/blob/ce06f6e40bdb2bc560d9241aa1ef23db4fff065f/js/angular/service/loading.js#L64) वास्तव में। प्रोटैक्टर के साथ उपयोग किए जाने पर एक लीकी अबास्ट्रक्शन का उत्कृष्ट उदाहरण। – avandeursen

+1

मैंने आईओनिक फोरम पर पूछा है कि मुझे $ टाइमआउट के बजाय $ interval के साथ ionicLoading.duration प्रॉपर्टी को आजमाएं और कार्यान्वित करना चाहिए http://forum.ionicframework.com/t/loading-implement-the-duration-with- अंतराल-बजाय-टाइमआउट/26839 –

+0

आपको :-) इसके लिए जाना चाहिए! – avandeursen

संबंधित मुद्दे