2014-10-20 6 views
9

मेरे प्रोटैक्टर परीक्षणों में मेरे पास बहुत अधिक संख्या में ब्लॉक का वर्णन है। मुझे टेस्ट आउटपुट के पेज और पेज सही ढंग से इंडेंट किए जाते हैं लेकिन यह देखना मुश्किल है कि कौन सा परीक्षण है और परीक्षण कितने दूर हैं।क्या किसी को प्रोटैक्टर डिस्क्रॉइज ब्लॉक में सूची संख्या जोड़ने का कोई तरीका मिला है?

क्या किसी ने वर्णन करने के लिए सूची संख्या जोड़ने की कोशिश की है। कुछ ऐसा:

1. Main Page test 
    1.1 Test xxx 
    1.2 Test yyy 
     1.2.1 Describe in describe in describe test 
2. XXX Page test 
    2.1 Test abc 

ध्यान दें कि यहां बिंदुओं के बाद पहला और शायद दूसरा नंबर वर्णनों के साथ वर्णन का परिणाम होगा।

उत्तर

4

आप displaySuiteNumber विकल्प के साथ jasmine spec reporter उपयोग कर सकते हैं (> = 1.1.0) अपने चांदा परीक्षण के उत्पादन में प्रदर्शित करने के लिए।

आउटपुट उदाहरण:

1 first suite 
    ✗ should failed 
    - Expected true to be false. 
    ✓ should be ok 

2 second suite 
    ✗ should failed 
    - Expected true to be false. 
    ✓ should be ok 

    2.1 first child suite 

    2.1.1 first grandchild suite 
     ✗ should failed 
     - Expected true to be false. 
     - Expected true to be false. 
     ✗ should failed 
     - Expected true to be false. 
     ✓ should be ok 
+0

आपके सुझाव के लिए धन्यवाद। ब्याज से आपको लगता है कि यह एक ऐसी सुविधा है जिसे सीधे जैस्मीन स्पेक रिपोर्टर में जोड़ा जा सकता है? मुझे कस्टम प्रोसेसर के विचार पसंद हैं लेकिन अगर यह कॉन्फ़िगरेशन सुविधाओं के रूप में उपलब्ध थे तो यह आगे बढ़ना आसान होगा। धन्यवाद –

+1

मैं कॉन्फ़िगरेशन विकल्पों की मात्रा को सीमित करने का प्रयास करता हूं, उस कारण से कस्टम प्रोसेसर पेश किए गए थे। लेकिन आप सही हैं, यह विकल्प अन्य उपयोगकर्ताओं के लिए उपयोगी हो सकता है। मैं इसे एक कॉन्फ़िगरेशन फीचर के रूप में जोड़ रहा हूं। –

+1

मैंने तदनुसार अपना जवाब अपडेट किया है। –

4

आप एक (इतना नहीं) सरल "प्लगइन" लिख सकते हैं जो इस कार्यक्षमता को जोड़ता है। मैं मूल describe और it फ़ंक्शंस को प्रतिस्थापित करने से बचूंगा। मेरे दृष्टिकोण के केवल नकारात्मक पक्ष यह है कि आप एक खोज करते हैं और बदलने के लिए और यहlp.describe और क्रमश: lp.it वर्णन से होगा।

(हाँ, तुम बस के ऊपर लिख सकता है मूल describe और it यदि आप यकीन है कि यह कुछ और को प्रभावित नहीं करेगा कर रहे हैं - और ऐसा नहीं होना चाहिए, लेकिन सिर्फ सुरक्षित पक्ष पर होना करने के लिए, ऐसा नहीं :))

मेरे दृष्टिकोण को ध्यान में तथ्य यह है कि आप एक describedescribe दूसरे के अंदर हो सकता है लेने के लिए अद्यतन:

सूची-plugin.js

(function(protractorDescribe, protractorIt) { 
    var level = -1; 
    var ids = [1]; 

    function levelLabel() { 
     var label = ids.join('.'); 
     if(ids.length === 1) { 
      label += '.'; 
     } 
     return label; 
    } 

    function startDescribe() { 
     startIt(); 
     level += 1; 
    } 

    function endDescribe() { 
     ids[level] += 1; 
     ids.pop(); 
     level -= 1; 
    } 

    function startIt() { 
     if(!ids[level + 1]) { 
      ids[level + 1] = 1; 
     } 
    } 

    function endIt() { 
     ids[level + 1] += 1; 
    } 

    function describe(name, body) { 
     var protractorResult; 

     startDescribe(); 
     protractorResult = protractorDescribe(levelLabel() + ' ' + name, body); 
     endDescribe(); 

     return protractorResult; 
    } 

    function it(name, body) { 
     var protractorResult; 

     startIt(); 
     protractorResult = protractorIt(levelLabel() + ' ' + name, body); 
     endIt(); 

     return protractorResult; 
    } 

    exports.describe = describe; 
    exports.it = it; 

})(describe, it); 

spec.js

var lp = require('./list-plugin.js'); 

lp.describe('Main Page test', function() { 
    lp.it('Test xxx', function() { 
     expect('a').toEqual('a'); 
    }); 

    lp.describe('Test yyy', function() { 
     lp.it('Describe in describe test', function() { 
      expect('a').toEqual('a'); 
     }); 
    }); 
}); 

lp.describe('XXX Page test', function() { 
    lp.it('Test abc', function() { 
     expect('a').toEqual('a'); 
    }); 
}); 

conf.js

exports.config = { 
    seleniumAddress: 'http://localhost:4444/wd/hub', 
    jasmineNodeOpts: { 
    isVerbose: true 
    }, 
    specs: [ 
    'spec.js' 
    ] 
}; 
+0

मुझे लगता है कि यह एक अच्छी शुरुआत है। मैं इसे कैसे बढ़ा सकता हूं ताकि यह मेरे प्रश्न उदाहरण के रूप में बहु-स्तर की संख्या प्रदान करे जहां दूसरे और तीसरे स्तर वर्णन आदि के भीतर वर्णन का परिणाम थे। –

+0

Riiight ... भूल गया कि आप ऐसा कर सकते हैं :) मेरा अद्यतन उत्तर देखें। –

+0

आपके उत्तर के साथ दो समस्याएं हैं: '1.' इसे कस्टम' lp.describe' '2. का उपयोग करने की आवश्यकता है। यह सही ढंग से काम नहीं कर रहा है - यह * सरल * spec: http://screencast.com/ टी/0bWZAhYlUf ऐसे आउटपुट का उत्पादन करता है: http://screencast.com/t/qpdwpzfC (इसे स्वयं जांचें)। '1.' को आसानी से दूर किया जा सकता है, लेकिन एक कामकाजी समाधान में अपना वर्तमान दृष्टिकोण बदलना मुझे एक छोटे से काम के रूप में नहीं लगता है। –

3

शायद सबसे सुरुचिपूर्ण समाधान चांदा के कोड को बदलने के लिए किया जाएगा। लेकिन पुस्तकालय को अपग्रेड करने के लिए आवश्यक होने पर यह समस्याग्रस्त हो सकता है।

मैं सजावटी प्रोटैक्टर के द्वारा का वर्णन करके एक समाधान समाधान के साथ आया था। एकमात्र चेतावनी यह है कि इसे स्पेक कोड को सही ढंग से इंडेंट करने की आवश्यकता होती है। असल में इस सीमा को एक फीचर के रूप में माना जा सकता है, क्योंकि निश्चित रूप से कोड सही ढंग से इंडेंट करने के लिए एक अच्छा अभ्यास है और वर्तमान आईडीई के साथ यह केवल 2-सेकंड-कार्य है। आप require('./protractor-decorator').resetCounter(); पर कॉल करके काउंटर को रीसेट कर सकते हैं (उदा। प्रत्येक spec की शुरुआत में)।

अद्यतन

आप it सिर्फ it = require('./protractor-decorator.js').decorateUsingErrorStack(it); फोन या एक ही विधि में यह refactor को सजाने के लिए चाहते हैं।

चांदा-decorator.js मॉड्यूल:

var stack = []; 
var lastIndentColumn = 1; 

function decorateUsingErrorStack(origDescribe){ 

    function describe(){ 
     var callerIndent, args; 

     if(stack.length === 0){ 
      stack.push(0); 
     } 

     // from current stack we get the information about indentation of the code 
     callerIndent = new Error().stack.split('\n')[2].split(':'); 
     callerIndent = parseInt(callerIndent[callerIndent.length-1]); 

     if(callerIndent == lastIndentColumn){ 
      stack[stack.length-1] += 1; 
     } 
     else { 
      if(callerIndent < lastIndentColumn){ 
       stack.pop(); 
       stack[stack.length-1] += 1; 
      } 
      else { 
       stack.push(1); 
      } 
     } 
     lastIndentColumn = callerIndent; 

     args = Array.prototype.slice.call(arguments, 0); 

     origDescribe.call(null, stack.join('.') + '. ' + args[0], args[1]); 
    } 

    return describe; 
} 


module.exports = { 
    decorateUsingErrorStack : decorateUsingErrorStack, 
    resetCounter : function(){ 
     // this function should be called to start counting from 1. 
     stack = []; 
     lastIndentColumn = 1; 
    } 
} 

कल्पना।js फ़ाइल:

describe = require('./protractor-decorator.js').decorateUsingErrorStack(describe); 

describe(' should be 1.', function(){ 

    describe('should be 1.1.', function(){ 
     it('xxx', function(){ 

     }); 

     describe('should be 1.1.1.', function(){ 
      it('xxx', function(){ 

      }); 

      describe('should be 1.1.1.1', function(){ 
       it('xxx', function(){ 

       }); 
      }); 

      describe('should be 1.1.1.2', function(){ 
       it('xxx', function(){ 

       }); 
      }); 

     }); 

     describe('should be 1.1.2.', function(){ 
      it('xxx', function(){ 

      }); 
     }); 

    }); 

    describe('should be 1.2.', function(){ 
     it('xxx', function(){ 

     }); 
    }); 

    describe('should be 1.3.', function(){ 
     it('xxx', function(){ 

     }); 
    }); 

}); 

// same as above but all starts with 2. 
describe(' should be 2.', function(){...}); 
+0

1. आप 'इसे' विवरण संभाल नहीं रहे हैं। 2. अगर मैं किसी अन्य फ़ंक्शन में 'वर्णन' कॉल को लपेटता हूं तो इंडेंटेशन एक से बंद हो जाएगा, और मैं हमेशा 'सख्त' का उपयोग करता हूं और एक अज्ञात फ़ंक्शन के अंदर लपेटता हूं। 3. त्रुटि()। स्टैक फ़ायरफ़ॉक्स में एक अलग कार्यान्वयन है। इससे मुद्दों का कारण बन सकता है। 4. इस दृष्टिकोण के प्रदर्शन प्रभाव को कम करने के लिए मैं 'Error.stackTraceLimit' को 1 सेट कर दूंगा (एक स्टैक ट्रेस प्राप्त करने में कोड निष्पादन रोकना शामिल है)। –

+0

1. ओपी ने 'वर्णन' के लिए कहा 2. यह एक समाधान का बीज है और इंडेंटेशन शुरू करना कोई समस्या नहीं है क्योंकि इसे आसानी से बदला जा सकता है। ??? फ़ायरफ़ॉक्स में ??? क्या आप विस्तृत कर सकते हैं (ये चश्मा एफएफ में किसी भी तरह से नहीं चल रहे हैं) 4. मुझे इस चरण में प्रदर्शन की परवाह नहीं है (क्योंकि लाभ काफी मामूली होगा)। –

+0

नहीं, ओपी ने एक विशिष्ट आउटपुट के लिए कहा कि आपका समाधान उत्पन्न नहीं होता है। मेरा समाधान भी एक बीज था, लेकिन यह देखते हुए कि आप पूरी तरह से दिलचस्पी रखते हैं, मैंने इसे अतिरिक्त परिदृश्यों को कवर करने के लिए विस्तारित किया है। ओपी ने यह निर्धारित नहीं किया कि वह कौन से वातावरण परीक्षण चलाती है, लेकिन अगर वह नियमित आधार पर ई 2 परीक्षण कर रही है तो वह संभवतः कई अलग-अलग ब्राउज़रों में करती है। जब आप कई परीक्षण चलाते हैं कि आउटपुट का पालन करना मुश्किल हो जाता है तो आप निश्चित रूप से पूरे एप्लिकेशन को अवरुद्ध नहीं करते हैं, जबकि यह AJAX कॉल चला रहा है और अन्य सभी ई 2 चीजें हो रही हैं। –

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

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