Ich plane Unit Test eine Winkelanweisung mit Jasmin zu testen. Meine Richtlinie sieht wie folgt ausUnit Test angularjs Direktive mit Uhr auf Elementhöhe
angular.module('xyz.directive').directive('sizeListener', function ($scope) {
return {
link: function(scope, element, attrs) {
scope.$watch(
function() {
return Math.max(element[0].offsetHeight, element[0].scrollHeight);
},
function(newValue, oldValue) {
$scope.sizeChanged(newValue);
},
true
);
}
};
});
Meine Einheit Testfall ist als
describe('Size listener directive', function() {
var $rootScope, $compile, $scope, element;
beforeEach(inject(function(_$rootScope_, _$compile_) {
$rootScope = _$rootScope_;
$compile = _$compile_;
$scope = $rootScope.$new();
element = angular.element('<span size-listener><p></p></span>');
$compile(element)($scope);
$scope.$digest();
}));
describe("Change in size", function() {
it("should call sizeChanged method", function() {
element[0].offsetHeight = 1;
$compile(element)($scope);
$scope.$digest();
$scope.$apply(function() {});
expect($scope.sizeChanged).toHaveBeenCalled();
});
});
});
folgt Der Code funktioniert gut. Aber der Komponententest schlägt fehl. Die Watch-Funktion wird aufgerufen, aber das Element [0] .offsetHeight in der Uhr gibt immer 0 zurück. Wie können wir das Element aktualisieren, damit die Uhr die neue Höhe beobachten kann? Gibt es einen Weg dies zu testen, weil wir hier kein DOM haben. Bitte leiten Sie mich über Änderungen, die mit Unit-Test durchgeführt werden müssen.