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 成为不同的值。那么实际上是伪造滚动事件吗?我希望我的问题很清楚?

4

2 回答 2

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();
})
于 2012-08-10T23:51:01.470 回答
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");
   });
});

这通过了。希望这仍然可以帮助某人..

于 2012-08-11T16:13:30.467 回答