2012-08-10 46 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"); 
    }); 
}); 

并通过。希望这可能仍然有助于某人..