我有一個無限的滾動指令,我試圖單元測試。目前我有這個:如何用滾動測試AngularJS指令
describe('Infinite Scroll', function(){
var $compile, $scope;
beforeEach(module('nag.infiniteScroll'));
beforeEach(inject(function($injector) {
$scope = $injector.get('$rootScope');
$compile = $injector.get('$compile');
$scope.scrolled = false;
$scope.test = function() {
$scope.scrolled = true;
};
}));
var setupElement = function(scope) {
var element = $compile('<div><div id="test" style="height:50px; width: 50px;overflow: auto" nag-infinite-scroll="test()">a<br><br><br>c<br><br><br><br>e<br><br>v<br><br>f<br><br>g<br><br>m<br>f<br><br>y<br></div></div>')(scope);
scope.$digest();
return element;
}
it('should have proper initial structure', function() {
var element = setupElement($scope);
element.find('#test').scrollTop(10000);
expect($scope.scrolled).toBe(true);
});
});
但是.scrollTop(10000);似乎沒有觸發任何東西。
有無論如何單元測試這種類型的功能(我能單元測試其他指令與類似的交互,如點擊元素)?
在情況下,它是相對的,這是無限滾動代碼:
angular.module('nag.infiniteScroll', [])
.directive('nagInfiniteScroll', [
function() {
return function(scope, elm, attr) {
var raw = elm[0];
elm.bind('scroll', function() {
if (raw.scrollTop + raw.offsetHeight >= raw.scrollHeight) {
scope.$apply(attr.nagInfiniteScroll);
}
});
};
}
]);
那麼這個代碼觸發器,但它會觸發代碼,即使scrollTop()不適用,因爲raw.scrollTop,原始。 offsetHeight和raw.scrollHeight都在指令的代碼中計算爲0。也許這是不能進行單元測試的。 – ryanzec 2013-05-14 14:26:41
我有同樣的問題 - 看起來,元素不能添加到文檔時沒有pageYOffset/pageXOffset。將元素添加到文檔也不起作用「無法讀取屬性'createDocumentFragment'爲null」 – iRaS 2015-10-28 13:59:37