2013-06-26 4 views
32

जैस्मीनजेएस के साथ परीक्षण लिखते समय मेरे पास कई परीक्षण होते हैं जो प्रत्येक कोड के बाद/बाद में समान होते हैं।जैस्मीन जेएस में प्रत्येक के बाद/बाद में पुन: उपयोग कैसे करें?

क्या जैस्मीनजेएस परीक्षण सूट का उपयोग करके विरासत मॉडल को लागू करने का कोई तरीका है?

मैं सभी परीक्षणों को एक ही describe में समूहित कर सकता हूं लेकिन इस मामले में मैं एक ही बड़ी जेएस फ़ाइल के साथ सभी परीक्षणों को समाप्त कर दूंगा।

मैं प्रत्येक पृष्ठ के लिए परीक्षणों को विभाजित करना चाहता हूं।

describe('Services Page', function() { 

    beforeEach(function() { 
     login_as_admin() 
    }) 

    beforeEach(function() { 
     browser().navigateTo('/services') 
    }) 

    if('Some test for services page', function() {}) 

    afterEach(function() { 
     logout() 
    }) 

}) 


describe('Administrators Page', function() { 

    beforeEach(function() { 
     login_as_admin() 
    }) 

    beforeEach(function() { 
     browser().navigateTo('/administrators') 
    }) 

    if('Some test for administrators page', function() {}) 

    afterEach(function() { 
     logout() 
    }) 

}) 
+1

हर पृष्ठ 'login_as_admin()' और 'लॉगआउट()' होगा? – xst

उत्तर

27

मैं इस आंशिक रूप से in this blog post और भी answered here जांच की है, लेकिन मैं अपने उदाहरण के लिए एक अनुकूलित जवाब जोड़ रहा लगता है:

पुन: प्रयोज्य कोड:

function sharedSetup(startPage) { 
    beforeEach(function() { 
     login_as_admin(); 
     browser().navigateTo(startPage); 
    }); 

    afterEach(function() { 
     logout(); 
    }); 
}; 

इसका उपयोग कैसे करें:

describe('Services Page', function() { 
    sharedSetup('/services'); 

    it('Some test for services page', function() {}); 
}); 

describe('Administrators Page', function() { 
    sharedSetup('/administrators'); 

    it('Some test for administrators page', function() {}); 
}); 
3

जैस्मीन आप एक describe कॉल की beforeEach और afterEach बाहर डाल करने के लिए अनुमति नहीं है:

यहाँ एक उदाहरण है। इस तरह आप सेटअप और टियरडाउन कर सकते हैं जो आपके सभी चश्मा के लिए वैश्विक है। आपका logout() कॉल लगता है कि यह वैश्विक टियरडाउन के लिए एक अच्छा उम्मीदवार हो सकता है, और यदि आपके सभी चश्मा व्यवस्थापक के रूप में लॉगिन करते हैं, तो आप इसे वैश्विक दायरे में भी ले जा सकते हैं।

कुछ चीजों के लिए उपयोग की जाने वाली चीज़ों के लिए, लेकिन सभी नहीं, चश्मे, आपके login_as_admin() जैसी विधि रखने से एक ही स्थान पर उस तर्क को मजबूत करने का सबसे अच्छा तरीका लगता है।

0

संदर्भ: (Pivotal Labs Blog:Davis W. Frank)

उन्होंने कहा कि एक समारोह है कि अलग अलग व्यक्ति सुइट के लिए मानकों के साथ कहा जाता है में साझा कार्यक्षमता का संग्रह वर्णन करता है। प्रत्येक सूट के भीतर इस फ़ंक्शन को कॉल करना सामान्य सेटअप/कॉन्फ़िगरेशन निष्पादित करेगा।

फ़ाइलों में परीक्षणों को विभाजित करने के लिए; परीक्षण किए गए फ़ंक्शन वाले फ़ाइल को <script> टैग के साथ प्रत्येक पृष्ठ के भीतर शामिल किया जा सकता है यदि परीक्षण ब्राउज़र आधारित हैं, या परीक्षण के नोड पर आधारित require(...) शीर्ष पर हैं। फिर आप परीक्षणों को स्वतंत्र रूप से चला सकते हैं लेकिन उस साझा सेटअप का उपयोग करके जिसे केवल एक बार परिभाषित किया जाता है।

12

यदि आप अपने सभी स्वीट्स के लिए ऐसा करना चाहते हैं, तो आपया afterEach फ़ंक्शन 01 में पंजीकृत कर सकते हैं:

jasmine.getEnv().topSuite().beforeEach({fn: function() { 
    //log in as admin 
}}); 

आप केवल, तुम सब-सुइट के साथ काम कर सकते हैं कुछ सुइट्स पर इसे लागू करना चाहते हैं:

describe("as_admin", function() { 
    beforeEach(function() { 
    //log in as admin 
    }); 

    describe('Services Page',function() {...}); 
    describe('Administrators Page',function() {...}); 

} 
+0

मुझे लगता है कि इसका उपयोग करना भी संभव है: jasmine.getEnv()। पहले (फ़ंक्शन() { // व्यवस्थापक } के रूप में लॉग इन करें); यहां परिवर्तनों में शामिल परीक्षणों के आधार पर: https://github.com/jasmine/jasmine/issues/811 – rajsite

+0

ऐसा लगता है कि 'पहले से' कॉलबैक को 'पहले से' में कॉल करना महत्वपूर्ण है क्योंकि यह इसके बिना लटकता है। – Vanuan

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