Tôi có chỉ thị tùy chỉnh hiển thị/ẩn phần tử dựa trên giá trị của một dịch vụ khác. Tôi đã thử tạo một bài kiểm tra để xem liệu chỉ thị có làm được gì không. Lúc đầu, tôi đã kiểm tra lại bộ chọn ": có thể nhìn thấy", nhưng nó luôn luôn trả về false ngay cả khi tôi biết rằng phần tử đã thực sự hiển thị.Kiểm tra nếu chỉ thị góc tùy chỉnh hiển thị/ẩn phần tử
it('Should show element if logged', function() {
element = angular.element('<p hc-auth>Some Text</p>');
AuthService.Logged = true;
scope = $rootScope.$new();
scope.$apply(function() {
$compile(element)(scope);
});
expect(element.is(":visible")).toBeTruthy();
});
Sau khi một số lỗi, tôi nhận ra rằng trong quá trình thực thi, các phần tử có chiều rộng và chiều cao từ 0 ngay cả khi màn hình đã được thiết lập để ngăn chặn, và do đó ": nhìn thấy được" chọn luôn trả về false. Tôi đã thay đổi nó để kiểm tra bộ chọn hiển thị thay vào đó và bây giờ nó kiểm tra chính xác phần tử, nhưng điều này dường như quá phụ thuộc vào việc thực hiện cách hiển thị một phần tử.
it('Should show element if logged', function() {
element = angular.element('<p hc-auth>Some Text</p>');
AuthService.Logged = true;
scope = $rootScope.$new();
scope.$apply(function() {
$compile(element)(scope);
});
expect(element.css('display')).toBe('block');
});
Cách tiếp cận tốt nhất cho tình huống này là gì?
Tôi muốn nói đó là cách chính xác. Vì Angular 1.2, cả hai lệnh 'ngShow' và' ngHide' đều áp dụng lớp 'ng-hide' thay vì thay đổi thuộc tính' display' thành 'none' hoặc' block'. Vì vậy, tôi nghĩ rằng nó an toàn để kiểm tra lớp đó khi kiểm tra 'ngHide' hoặc' ngShow'. –
Vâng thực sự tôi đã kết thúc việc thay đổi triển khai của mình để thêm/xóa lớp ng-hide và kiểm tra nó trên bài kiểm tra giống như bạn đã nói, tôi đoán đây là cách tốt nhất để đi. cảm ơn! –