2013-10-24 2 views
17

मैं अपने spec फ़ाइल में कुछ कोड दोहराता रहता हूं जो टेम्पलेट को इंजेक्ट करता है और फिर इसे संकलित करता है। मैंने चीजों को सूखा रखने के लिए इस कोड को एक सहायक समारोह में निकाला। मेरा मानना ​​है कि समस्या एक सहायक समारोह में beforeEach पर रखने की कोशिश में है।मैं जैस्मीन/कोणीय के लिए एक सहायक बनाने के लिए कैसे एक से पहले

beforeEach(module('app/views/header.html')); 

    beforeEach(inject(function($templateCache, $compile, $rootScope) { 
    template = $templateCache.get('app/views/header.html'); 
    $templateCache.put('views/header.html', template); 
    var directive = angular.element('<clinical-header></clinical-header>'); 
    element = $compile(directive)($rootScope); 
    $rootScope.$digest(); 
    })); 

यहाँ सहायक समारोह है कि मैं बनाया जाता है: यहाँ मेरी कोड है कि मैं एक समारोह में सार कोशिश कर रहा हूँ का टुकड़ा है

var setupTemplate = function(templateName, element) { 
    beforeEach(module('app/views/' + templateName)); 
    beforeEach(inject(function($templateCache, $compile, $rootScope) { 
    var template = $templateCache.get('app/views/' + templateName); 
    $templateCache.put('views/' + templateName, template); 
    var directive = angular.element(element); 
    element = $compile(directive)($rootScope); 
    $rootScope.$digest(); 
    })); 

और अब इस सहायक समारोह के लिए कॉल है :

setupTemplate('header.html', '<clinical-header></clinical-header>'); 

मेरी सहायक समारोह के अंत में, सब कुछ अच्छा लग रहा है, लेकिन जब मैं अपने it ब्लॉक करने के लिए कूद, सब कुछ अनिर्धारित रहता है। क्या मैं एकाधिक beforeEach निकाल सकता हूं? ऐसा करने का सही तरीका क्या है? इसके अलावा, जैस्मीन सहायक कार्यों को रखने के लिए उचित जगह कहां है और यह कैसे किया जाता है?

उत्तर

15

आप विशिष्ट वर्णन फ़ंक्शन के संदर्भ के बाहर उन्हें लिखकर प्रत्येक() फ़ंक्शन से पहले वैश्विक बना सकते हैं। आपको इन फ़ंक्शन के साथ एक spec-helper.js क्लास बनाना चाहिए और इसे कर्म कॉन्फ़िगरेशन के माध्यम से लोड करना चाहिए।

ध्यान दें कि पहले से ही कार्य किसी भी कार्य से पहले निष्पादित हो जाएंगे (जैसे वे वैश्विक हैं)।

मैंने प्रदर्शन के लिए fiddle बनाया है, हालांकि कर्म के साथ कुंजी कॉन्फ़िगरेशन में फ़ाइल जोड़ना है ताकि यह ब्राउज़र द्वारा लोड हो।

युक्ति हेल्पर:

var myGlobal; 
beforeEach(function() { 
    // This will run before any it function. 
    // Resetting a global state so the change in this function is testable 
    myGlobal = 10 
}); 

टेस्ट सुइट: अगर आप केवल परीक्षण के एक सबसेट है, जहां परीक्षण अलग फ़ाइलें हैं, के लिए कोड को चलाना चाहते हैं

describe('first suite', function(){ 
    it('is a test', function(){ 
    expect(myGlobal).toBe(10); 
    // Reset the value to show that beforeEach is executed for each it function 
    myGlobal = 20; 
    expect(myGlobal).toBe(20); 
    }); 

    it('is another test', function($location){ 
    expect(myGlobal).toBe(10); 
    myGlobal = 20; 
    expect(myGlobal).toBe(20); 
    }); 
}); 
+1

यह समस्या का समाधान नहीं करता । –

+1

आप सही हैं। यह सभी परीक्षणों के लिए चलता है, भले ही उनकी फ़ाइल –

+3

मेरी परियोजना में एक जैसी ही स्थिति है। मैंने अपने ग्लोबल 'पहले से प्रत्येक कॉल' को फ़ंक्शन के अंदर लपेट लिया है, और किसी भी परीक्षण सूट के लिए बस मेरे 'वर्णन' ब्लॉक के शीर्ष पर उस फ़ंक्शन को कॉल करें जिसकी आवश्यकता है। –

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