2012-08-10 32 views
1

我想測試一個元素通過窗口中間時是否發生了什麼。我似乎沒有得到它。這是我的源文件:茉莉花和元素的位置

 checkIfWorkInMiddle: function(element) { 
     var middelOfScreen = this.getMiddleOfScreen(); 
     var posAboveBottom = this.getPosAboveBottom(element); 
     if (posBottomAboveBottom > middelOfScreen) { 
      return true; 
     } 

元素的位置取決於滾動位置。當我做我的測試時,元素總是在中間屏幕下方。我如何在我的測試中改變這一點?我的規格文件如下:

describe("Get Middle of screen" , function() { 
it('returns true if above the middle of screen' , function() { 
    var fakeElement = Object.create(blocks); 
    var x = fakeElement.checkIfWorkInMiddle(element); 

    expect(x).toBeTruthy(); 
}); 

});

所以這總是在測試中返回false。我可以在測試中做什麼來強制posBottomAboveBottom成爲不同的值。所以真的假的滾動事件?我希望我的問題清楚?

+1

某些標記和CSS將很高興實際看到元素在頁面上的位置。也許你可以創建一個[小提琴](http://jsfiddle.net)。 – 2012-08-10 23:20:20

回答

1

你可以嘗試使用

window.scrollTo(x,y); 

然後在中間或下方中間的值傳遞像Y = 500這將定位窗口,以便茉莉花可以運行測試等等。

it("check is .... ", function(){ 
    window.scroll(0,400); 
    var fakeElement = Object.create(blocks); 
    var x = fakeElement.checkIfWorkInMiddle(element); 

    expect(x).toBeTruthy(); 
}) 
0

感謝您的回答。然而,我找到了解決方案。這很明顯。一個更簡單的例子。對象的兩種方法(x1和y1)。一種方法使用另一種方法將其返回值存儲在變量中。你可以想象,y1呈現元素的頂部。

x1 : function() { 
     var p = this.y1(); 
     if (p > 3) { 
      return 'bigger'; 
     } else { 
      return 'smaller' 
     } 
    }, 
y1: function() { 
     return 1; 
    } 

我想影響的元素的位置,因此在這個簡化的例子Y1的返回值在我的測試。我這樣做如下:

describe("See if Called" , function() { 
    it('check if returns the valid value' , function() { 
    var fakeElement = Object.create(blocks); 
    spyOn(fakeElement, 'y1').andCallFake(function() { 
     return 4; 
    }); 
    var x = fakeElement.x1(); 
    expect(x).toEqual("bigger"); 
    }); 
}); 

並通過。希望這可能仍然有助於某人..