2013-12-13 3 views
9

सबसे पहले, नीचे दिया गया कोड काम करता प्रतीत होता है। हालांकि, मैंने अभी तक किसी को ऐसा नहीं देखा है, इसलिए मैं सोच रहा हूं कि यह वैध है और यदि मैं अप्रत्याशित डाउनसाइड्स खो रहा हूं।प्रोटैक्टर जैस्मीन एक ब्लॉक के भीतर नेस्टेड ब्लॉक का वर्णन करता है

संदर्भ यह है कि मैं प्रोटैक्टर के साथ एक ई 2 ई परीक्षण लिख रहा हूं जो जैस्मीन-शैली का वर्णन/यह ब्लॉक का उपयोग करता है। मेरा लक्ष्य एक पृष्ठ लोड करना है और प्रत्येक पृष्ठ को फिर से लोड किए बिना it परीक्षण ब्लॉक का एक गुच्छा चलाएं (क्योंकि इसका समय लेने वाला)।

निर्माण मेरे पास है:

describe("Homepage", function() { 

    beforeEach(function() { 
     browser.get("/"); //loads the page 
    }); 

    it('elements', function() { 
     describe('test group', function() { 
      it('test 1', function() { 
       //run stuff 1 
      }); 

      it('test2', function() { 
       //run stuff 2 
      }); 
     }) 
    }); 
}); 

मुझे पता है एक विकल्प सिर्फ यह करने के लिए है:

describe("Homepage", function() { 

    beforeEach(function() { 
     browser.get("/"); //goes to homepage 
    }); 

    it('elements', function() { 
     //run stuff 1 
     //run stuff 2 

    }); 
}); 

लेकिन मुद्दा यह है कि मैं परीक्षण अलग नहीं कर सकते है और आप अंत एक बड़े it ब्लॉक के साथ। मैं किसी भी तरह से हर बार पहले चलाने के मुद्दे से बचना चाहता हूं लेकिन फिर भी एक अच्छी तरह से अलग सेट टेस्ट ब्लॉक प्राप्त करने में सक्षम होना चाहिए।


वैसे, मैं भी इस की कोशिश की है:

describe("Homepage", function() { 

    browser.get("/"); //goes to homepage 

    it('elements', function() { 
     //run stuff 1 
     //run stuff 2 

    }); 
}); 

इस को छोड़कर आप इसी प्रकार अनेक चश्मा है जब काम नहीं करता। Browser.get() परीक्षण चलाने से पहले दूसरे के बाद एक रन चलाते हैं।

उत्तर

7

छोटे आकार में दावाों को तोड़ना निश्चित रूप से एक अच्छा विचार है। जैस्मीन एक वैश्विक सेटअप फ़ंक्शन होने की अपील नहीं करता है जो केवल एक बार चलता है। तो हो सकता है आप केवल सेटअप एक बार चल रहा है में beforeEach ब्लॉक चाल कर सकते हैं:

describe("Homepage", function() { 
    var pageLoaded = false; 

    beforeEach(function() { 
     if (! pageLoaded) { 
      browser.get("/"); 
      pageLoaded = true; 
     } 
    }); 
}); 
+0

यह एक अच्छा विचार है। मुझे यह देखने के लिए स्वीकार करने से पहले एक या दो दिन प्रतीक्षा करें कि किसी और के पास कोई विचार है या नहीं। – wlingke

+0

मैं 'browser.get() 'के इस विशिष्ट परिदृश्य के लिए भी जोड़ना चाहता था, आप' ब्राउज़र'getCurrentUrl() 'के साथ जिस पृष्ठ पर हैं, उसे भी देख सकते हैं और इसे" प्राप्त करने "से पहले वर्तमान पृष्ठ की जांच कर सकते हैं। – wlingke

3

Jasmine2 beforeAll() और afterall() जो पूरे सुइट के लिए एक बार चलाता है।

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