2017-02-16 12 views
5
it('should for something', function check(done) { 
    browser.sleep(2000); 
    $('.csTx').isPresent().then(function(result) { 
    if(result) { 
     done(); 
    } else { 
     xPage.clickBack(); 
     check(done); 
    } 
    }) 
}, 30000); 

कोई बता सकता है कि कैसे किया गया() काम करता है और यह क्या है। मैंने इसे गुमराह किया लेकिन मुझे कोई जानकारी नहीं मिली जो मेरे लिए समझने में आसान होगी। मैं protractor और jasmine के साथ स्वचालित कर रहा हूँ। कृपया उपरोक्त कोड पर विचार करें।क्या किया जाता है() इसके लिए और इसका उपयोग कैसे किया जाता है (प्रोटैक्टर, जैस्मीन)

+2

यह सिर्फ इस कॉलक को पूरा करने का संकेत है। आप इस spec में तब तक रहेंगे जब तक 'किया() ' – Gunderson

+0

@ गुंडरसन कहा जाता है - क्या आप मुझे इसके बारे में कुछ और बता सकते हैं। – rafalf

उत्तर

4

यदि आपका परीक्षण आपके परीक्षण के नियंत्रण प्रवाह में समानांतर कार्यकुशलता बनाता है (promises and control flow के बारे में और पढ़ें) तो आपको done का उपयोग करने की आवश्यकता है।

उदाहरण के लिए:

describe('Control Flow', function() { 
    function logFromPromise(text) { 
     var deferred = protractor.promise.defer(); 
     deferred.then(function() { 
      console.log(text); 
     }); 
     deferred.fulfill(); 
     return deferred; 
    } 

    it('multiple control flows', function() { 
     setTimeout(function() { 
      logFromPromise('1'); 
     }); 
     logFromPromise('0'); 
    }); 
} 

setTime कॉलिंग नियंत्रण में एक समानांतर टास्क पंक्ति बनाता है:

ControlFlow 
| TaskQueue 
| | Task<Run fit("multiple control flows") in control flow> 
| | | TaskQueue 
| | | | Task <logFromPromise('0');> 
| TaskQueue 
| | Task <setTimeout> 

कोणमापक सोचता है कि परीक्षण "किया" होने के बाद 0 छपा है। इस उदाहरण में, परीक्षण पूरा होने के बाद 1 शायद मुद्रित किया जाएगा। Task <setTimeout> के लिए चांदा प्रतीक्षा करने के लिए, आप कर समारोह कॉल करने की आवश्यकता:

it('multiple control flows', function(done) { 
     setTimeout(function() { 
      logFromPromise('1').then(function() { 
       done(); 
      }); 
     }); 
     logFromPromise('0'); 
    }); 

आप, जब परीक्षण "हो गया" है चांदा संभाल कर सकते हैं हैं। समानांतर कार्यकुशलता होने से आपके परीक्षण में अप्रत्याशित दौड़ की स्थिति हो सकती है।

2

यहां एक नमूना describe है जिसे आप चला सकते हैं और देख सकते हैं कि क्या होता है। मुझे यह उल्लेख करना होगा कि मैं प्रोटैक्टर का उपयोग नहीं करता हूं, इसलिए इसकी विशिष्ट क्षमताओं से संबंधित कुछ अतिरिक्त विचार हो सकते हैं।

describe('Done functionality', function(){ 

    var echoInOneSecond = function(value){ 
     console.log('creating promise for ', value); 
     return new Promise(function(resolve, reject){ 
      console.log('resolving with ', value); 
      resolve(value); 
     }); 
    }; 

    it('#1 this will untruly PASS', function(){ 
     var p = echoInOneSecond('value #1'); 
     p.then(function(value){ 
      console.log('#1 expecting...and value is ', value); 
      expect(value).toBe('value #1'); 
     }); 
    }); 

    it('#2 this will NOT FAIL', function(){ 
     var p = echoInOneSecond('value #2'); 
     p.then(function(value){ 
      console.log('#2 expecting... and value is ', value); 
      expect(value).not.toBe('value #2'); 
     }); 
    }); 

    it('3 = will truly FAIl', function(done){ 
     var p = echoInOneSecond('value #3'); 
     p.then(function(value){ 
      console.log('#3 expecting... and value is ', value); 
      expect(value).not.toBe('value #3'); 
      done(); 
     }); 
    }); 

    it('4 = this will truly PASS', function(done){ 
     var p = echoInOneSecond('value #4'); 
     p.then(function(value){ 
      console.log('#4 expecting... and value is ', value); 
      expect(value).toBe('value #4'); 
      done(); 
     }); 
    }); 
}); 

जब परीक्षण चल रहा है आप ध्यान देंगे अनुक्रम: पहले वादा किया # 1, # 2, # 3 बनाया जाएगा और एक के बाद एक संकल्प लिया। कृपया ध्यान दें कि # 1 और # 2 की अपेक्षा अभी तक नहीं चली जाएगी क्योंकि वादे को असंकालिक रूप से हल किया जाता है।

फिर, # 3 परीक्षण done का उपयोग करता है, # 3 वादे के बाद, पिछले सभी वादों के then एस के लिए कार्य का मूल्यांकन किया जाता है: आपको '# 1 उम्मीद ...' और '# 2 उम्मीद होगी ... ', लेकिन चमेली इस पर परवाह नहीं करेंगे क्योंकि परीक्षण # 1 और # 2 पहले ही समाप्त हो चुके हैं और उनके बारे में सब कुछ किया गया है। केवल उन # 3 उम्मीदों के बाद ही यह वास्तव में असफल हो जाएगा क्योंकि चमेली done() से पहले होने वाली हर चीज का ख्याल रखती है।

और फिर आप # 4 परीक्षण सामान्य प्रवाह देख सकते हैं - वादा, संकल्प, उम्मीद, जैस्मीन द्वारा विचार की जाने वाली सभी चीजें, इसलिए उम्मीद वास्तव में पारित हो जाएगी।

+0

मुझे लगता है कि प्रोटैक्टर हैंडल() स्वयं ही। यही कारण है कि चश्मा इसे चलाते हैं। लेकिन उस पर कुछ जानकारी की तलाश में, मूल रूप से प्रोटैक्टर हैंडल कैसे किया जाता है और जब मुझे करना चाहिए, तो इसका उपयोग नहीं करना चाहिए। आपकी व्यापक प्रतिक्रिया के लिए धन्यवाद – rafalf

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

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