我有一個基於另一個服務的值顯示/隱藏元素的自定義指令。我試圖創建一個測試,看看指令是否應該做什麼。在開始時,我再次測試了「:可見」選擇器,但即使當我知道該元素實際上正在顯示時,它總是返回錯誤。測試自定義角度指令是否顯示/隱藏元素
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();
});
一些調試之後,我意識到,測試執行期間,該元件具有0寬度和高度即使顯示器設置爲阻斷的,因此在「:可見」選擇器總是返回false。我改變它來檢查顯示選擇器,而現在它正確地測試元素,但這似乎太依賴於如何顯示元素的實現。
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');
});
這種情況的最佳方法是什麼?
我會說這是正確的方法。從Angular 1.2開始,'ngShow'和'ngHide'指令都應用'ng-hide'類,而不是將'display'屬性改爲'none'或'block'。所以我認爲在測試'ngHide'或'ngShow'時檢查這個類是安全的。 –
是的,實際上我最終改變了我的實現,以添加/刪除ng-hide類並在測試中檢查它,就像你說的那樣,我想這是最好的方法。謝謝! –