2015-05-27 31 views
6

Làm thế nào để bạn chọn một tùy chọn trong thử nghiệm chỉ thị góc?Kiểm tra chỉ thị góc chọn các tùy chọn

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'); 

Làm việc này tốt, nhưng làm cách nào để buộc bạn chọn tùy chọn?

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

EDIT:

Mẫu chỉ thị bao gồm một lựa chọn với một ng-mô hình nội bộ, tôi nghi ngờ điều này là nguyên nhân của vấn đề:

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

Trả lời

10

này làm việc cho tôi:

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

Lưu ý các cuộc gọi đến change().

+0

đáng ngạc nhiên, nhưng điều này hoạt động. Bạn chắc chắn cần cuộc gọi để thay đổi(). –

0

Nếu bạn chỉ muốn thử nghiệm khi đó, bạn chỉ cần kích hoạt sự kiện nhấp chuột:

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

Bạn có thể phải cho phép các trình xử lý khác nhau thực hiện bằng cách sử dụng $ timeout.flush(), $ scope.apply() và/hoặc bằng cách đặt mã xác minh của bạn vào khối $ timeout.

+0

Cố gắng rằng với khối $ timeout, isolateScope() $ áp dụng, $ tiêu(). Bất kỳ ý tưởng nào khác? – pschuegr

+0

Hãy thử 'angular.element (tùy chọn [1]). Prop ('đã chọn', true);' bạn sẽ không nhận được trình xử lý nhấp chuột, nhưng bạn có thể đặt tùy chọn được chọn –

+0

Tôi giả sử bạn có nghĩa là attr thay vì chống đỡ. Điều đó làm thay đổi trạng thái dom - nhưng tôi vẫn phải xử lý thay đổi. – pschuegr

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

Tôi đã thêm phương thức này làm cách tiếp cận khác ngoài những gì đã được trả lời bởi @ejain.

Nếu bạn có jquery avaiable (tức là, không jqLite), tôi nghĩ rằng sau đây cũng nên làm việc bằng cách kích hoạt change vào tùy chọn:.

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'); 
Các vấn đề liên quan