我想测试当元素通过窗口中间时发生了什么。我似乎没有得到它。这是我的源文件:
checkIfWorkInMiddle: function(element) {
var middelOfScreen = this.getMiddleOfScreen();
var posAboveBottom = this.getPosAboveBottom(element);
if (posBottomAboveBottom > middelOfScreen) {
return true;
}
元素的位置取决于滚动位置。当我进行测试时,元素始终位于屏幕中间。我怎样才能在测试中改变这一点?我的spec文件如下:
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为不同的值。所以实际上是假的滚动事件?我希望我的问题很清楚?
答案 0 :(得分:1)
您可以尝试使用
window.scrollTo(x,y);
然后传入中间或下面的中间值,例如y = 500.这将定位窗口,以便Jasmine可以运行测试。
it("check is .... ", function(){
window.scroll(0,400);
var fakeElement = Object.create( blocks );
var x = fakeElement.checkIfWorkInMiddle(element);
expect(x).toBeTruthy();
})
答案 1 :(得分: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");
});
});
这就过去了。希望这可能仍然有助于某人......