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

答えてくれてありがとう。しかし、私は解決策を見つけました。これは非常に明白でした。さらに簡単な例。オブジェクトの 2 つのメソッド (x1 と y1)。一方のメソッドは他方を使用して、その戻り値を変数に格納します。y1 が要素の上部を表していると想像できます。

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

要素の位置に影響を与えたいので、この単純化された例では、私の test の 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 に答える