2012-09-18 28 views
26

Tôi đã thử số AngularJS e2e tests và đang gặp khó khăn khi xác định có chọn hộp kiểm hay không.Làm cách nào để xác thực khi kiểm tra hộp kiểm trong các thử nghiệm AngularJS e2e?

tôi sử dụng cuối cùng để kết thúc thử nghiệm cho checkbox input như một mẫu (xem End để kết thúc tab thử nghiệm trong Ví dụ). Đoạn

Html:

Value1: <input type="checkbox" ng-model="value1"> <br/>

điều khiển đoạn mã:

function Ctrl($scope) { 
    $scope.value1 = true; 
} 

Đây là những gì tôi đã cố gắng:

1) expect(binding('value1')).toEqual('true');

Điều này làm việc trong mẫu kết thúc để kiểm tra kết thúc miễn là value1 được hiển thị trên màn hình với {{value1}}. Nếu bạn thử nghiệm cục bộ này và loại bỏ `{{value1}} thì kiểm tra ràng buộc không thành công. Trong hầu hết các ví dụ trong thế giới thực của tôi, tôi không hiển thị giá trị hộp kiểm trên màn hình ở bất kỳ đâu.

2) expect(input('value1').val()).toEqual('true');

Giá trị sẽ luôn luôn mặc định on và không liên quan hay không vào hộp kiểm ở trong trạng thái kiểm tra (lấy từ this post).


Lưu ý: Dường như việc thử nghiệm E2E góc sẽ được thay thế bằng Protractor trong tương lai (xem the docs)

Trả lời

17

Tôi upvoted câu hỏi này như tôi đã có cùng một vấn đề. Tôi đã sử dụng cách giải quyết sau trong thử nghiệm của mình, nhưng tôi hy vọng sẽ thấy cách tốt hơn.

expect(element('input[ng-model="value1"]').attr('checked')).toBeTruthy(); 
+0

Cảm ơn! Tôi thích điều này tốt hơn những gì tôi đang làm. Tôi sẽ giữ cho câu hỏi này mở một chút chỉ trong trường hợp có một cách tốt hơn :) – Gloopy

+5

Trong nghiệp, nó không phải là 'attr' nhưng' prop' mà nên được sử dụng.Đối với các đồng nghiệp. – Offirmo

1

Tôi hy vọng có một cách tốt hơn nhưng tôi đã nhận này bằng cách xác nhận số lượng các yếu tố đầu vào kiểm tra phù hợp với mô hình ràng buộc:

expect(element('input[ng-model="value1"]:checked').count()).toBe(1);

ít nhất một nhược điểm này khi kiểm tra nếu một cái gì đó không được chọn là nếu phần tử không tồn tại hoặc nếu có một lỗi đánh máy giá trị vẫn sẽ là 0 như trong ví dụ này:

expect(element('input[ng-model="valueDoesNotExist"]:checked').count()).toBe(0);

47

Đối với bất cứ ai sử dụng Protractor, có webdriver isSelected() cho chính xác này.

Thay vì yêu cầu checked thuộc tính bạn có thể làm:

expect(element(by.model('value1')).isSelected()).toBeTruthy(); 
+0

Khi tôi thử mã này nhận Ngoại lệ: "trạng thái phần tử không hợp lệ: Phần tử hiện không tương tác được và có thể không bị thao tác". Bất kỳ ý tưởng làm thế nào để giải quyết này – Pradeep

+0

Quay trở lại trong ngày Protractor của tôi, tôi đã giải quyết vấn đề phần tử cũ với kịch bản [waitReady.js] (https://gist.github.com/elgalu/2939aad2b2e31418c1bb), xem: http: // stackoverflow .com/questions/35533139/protractor-correct-use-of-waitready-js-file-in-my-tests/35536164 –

+0

Điều này sẽ được thay đổi thành câu trả lời được chấp nhận –

Các vấn đề liên quan