jasmine - क्या किया है() के लिए है और इसका इस्तेमाल कैसे किया जाता है(प्रोट्रैक्टर, चमेली)




protractor (2)

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

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


यहाँ एक नमूना 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 देख सकते हैं - वासन, हल, उम्मीद, सब कुछ जिसे चमेली ने माना है, सचमुच पास हो जाएगा।


यदि आपकी परीक्षा आपके परीक्षण के नियंत्रण प्रवाह ( वादे और नियंत्रण प्रवाह के बारे में अधिक पढ़ें) में समानांतर कार्यकुशलता पैदा करती 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>

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

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

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