2015-05-27 37 views
6

आप कोणीय निर्देश परीक्षण में कोई विकल्प कैसे चुनते हैं?कोणीय निर्देश परीक्षण विकल्प

var options = elem.find('#test-code-select option'); 
expect(angular.element(options[0]).text()).to.equal('234'); 
expect(angular.element(options[1]).text()).to.equal('236'); 

ये काम ठीक है, लेकिन मैं मैन्युअल रूप से किसी विकल्प के चयन को कैसे बल दूं?

angular.element(options[1]).click(); //nope 
angular.element(options[1]).trigger('click'); //nope 
angular.element(options[1]).attr('selected', true); //nope 

संपादित करें:

निर्देश टेम्पलेट एक आंतरिक एनजी-मॉडल के साथ एक का चयन भी शामिल है, मुझे लगता है इस समस्या के कारण है:

<select id='test-code-select' ng-options='code as code for code in codeList' ng-model='code'> 

उत्तर

10

यह मेरे लिए काम करता है:

var select = elem.find('#test-code-select'); 
select.val('236').change(); 
expect(scope.code).toEqual('236'); 

नोट change() करने के लिए कॉल।

+0

आश्चर्यजनक, लेकिन यह काम करता है। आपको निश्चित रूप से बदलने के लिए कॉल की आवश्यकता है()। –

0

तुम सिर्फ परीक्षण करना चाहते हैं हैंडलर क्लिक करें तो आप बस एक क्लिक घटना को गति प्रदान करने की जरूरत है:

angular.element(options[1]).trigger('click');

आपको $ timeout.flush(), $ scope.apply(), और/या अपने सत्यापन कोड को $ टाइमआउट ब्लॉक में डालकर विभिन्न हैंडलर निष्पादित करने की अनुमति देनी पड़ सकती है।

+0

की कोशिश की है कि $ टाइमआउट ब्लॉक के साथ, isolateScope() $ लागू होते हैं, $ डाइजेस्ट()। कोई अन्य विचार? – pschuegr

+0

'angular.element (विकल्प [1]) का प्रयास करें। प्रोप (' चयनित ', सत्य); आपको क्लिक हैंडलर नहीं मिलेगा, लेकिन आप चयनित विकल्प –

+0

सेट करने में सक्षम होना चाहिए, मुझे लगता है कि आप के बजाय attr सहारा। यह डोम राज्य को बदलता है - लेकिन मुझे अभी भी बदलाव को संसाधित करना है। – pschuegr

0
// UPDATE: to select multiple values pass an array 
// select is selector for <select> tag, preferrably ID 
select.val(['236', '479']).change(); 
0

मैं क्या @ejain से जवाब दिया गया है के पास एक अन्य दृष्टिकोण के रूप में जोड़ा है।

आप jQuery तो उपलब्ध (यानी, नहीं jqLite) निम्नलिखित भी विकल्प पर change ट्रिगर द्वारा काम करना चाहिए, मुझे लगता है कि है:।

var select = elem.find('#test-code-select'); 
var oneOption = select.find('option:contains("236")'); 
oneOption.prop('selected', 'selected').trigger('change'); 
expect(scope.code).toEqual('236'); 
संबंधित मुद्दे