无法在Jasmine测试中获取scrollTop值

时间:2014-11-07 18:03:17

标签: javascript jquery jasmine jasmine-jquery

这是我对Stack Overflow的第一个问题,而Jasmine对我来说还是比较新的,所以我希望我在这里做得很好。

我有一个Jasmine测试,我尝试将页面的滚动位置设置为某个值。实际的代码非常复杂,但我设法做了一个更简单的失败测试示例:

    it("should set scrollTop to equal 100", function () {
                    setFixtures("<div id='page' style='height: 1000px;'>Page content</div>");

                    spyOn($.fn, "scrollTop");
                    $("#page").scrollTop(100);
                    expect($.fn.scrollTop).toHaveBeenCalledWith(100); // this test passes

                    expect($("#page").scrollTop()).toEqual(100);
    });

结果:预期0等于100.

我将scrollTop设置为100,并期望它就在下一行。该测试如何失败?

如果重要的话,我正在使用带有requirejs的Jasmine 1.3.1和jasmine-jquery作为扩展。

1 个答案:

答案 0 :(得分:3)

我看不出setFixtures的作用,但我的猜测是因为;

  • 创建的DOM节点尚未附加到实时DOM中的任何位置。
  • DIV的样式不可滚动。
  • DIV没有足够的内容来显示滚动条。

这是一个简单的例子;

var div = document.createElement('div');
div.style.height = '100px';
div.style.width = '100px';

// ensure the content has a track for scrollbars (won't work without this)
div.style.overflow = 'scroll';

// it also needs enough content to actually be scrollable (won't work without this)
div.innerHTML = '<br>x<br>x<br>x<br>x<br>x<br>x<br>x<br>x';

// needs to be appended to the live DOM (won't work without this)
document.body.appendChild(div);

// we can now set this value
div.scrollTop = 50;

// and read it back
console.log(div.scrollTop);
// == 50

我希望这有帮助,谢谢。