灰烬验收测试和Then()不等到滚动事件完成

时间:2016-12-20 20:02:36

标签: jquery testing ember.js qunit event-loop

我需要一个emberJs验收测试才能滚动到页面中的某个点,然后断言页面的内容。

这两个功能,

Ember.$('body').scrollTop(1000);

window.scroll(0,1000);

后跟

andThen(()=>{
    console.log('body', Ember.$('body').scrollTop());
}) 

打印出body scrollTop位置为108.我需要它在1000.

我可以到达body scrollTop为1000的那一刻的唯一方法就是到目前为止我使用这个回调:

Ember.$('body').animate({scrollTop: 1000}, () => {
  console.log('body', Ember.$('body').scrollTop());
  staticWiz.assertHasGoToTopButton(true);
});

这里的问题是,在回调发生时,没有任何测试内容存在。我无法断言任何事情。

如果我尝试将assert.async()和done()与此回调一起使用,那么当body scrollTop()处于108时,它会过早地触发:

const done = assert.async();
Ember.$('body').animate({scrollTop: 1000}, () => {
    console.log('body', Ember.$('body').scrollTop());
    staticWiz.assertHasGoToTopButton(true);
    done();
});

如果我将重复超时设置为检查滚动位置的方法,它将永远保持在108的相同位置。

const done = assert.async();
window.scroll(0, 1000);
const checkScroll = () => {
  console.log('body', Ember.$('body').scrollTop());
  if (Ember.$('body').scrollTop() === 1000) {
    staticWiz.assertHasGoToTopButton(true);
    done();
    return;
  }
  setTimeout(checkScroll, 1000);
};
checkScroll();

因此。有任何想法吗?有没有人为此之前得到过这个工作,在这种情况下你不能进行任何程度的滚动但是需要一个具有Emberjs验收测试的特定数字?

更新:Coworker刚刚意识到测试页面正在通过测试而不是测试页面内的嵌套app主体滚动。 '身体'我们的应用程序中的滚动浏览器不会在测试页面的应用程序窗口中选择一个滚动条。不知道从哪里去。

1 个答案:

答案 0 :(得分:4)

使这项工作的一种方法是在Ember中使用低级var config功能。

请参阅:http://emberjs.com/api/classes/Ember.Test.html#method_registerWaiter

以下是您将如何使用它:

waiter

在此处查看:https://ember-twiddle.com/1407bbadbb13365181f91201de6ba46c?openFiles=tests.acceptance.my-acceptance-test.js%2C