mocha在测试setTimeout函数之前等待

时间:2017-08-18 10:59:49

标签: javascript mocha jsdom

我有一个功能,在稍微延迟后调用另一个:

const messageboxes = {    
    fade: target => {
        target.classList.add('fade');
        window.setTimeout(messageboxes.hide, 350, target);
    },
    hide: el => {
        el.classList.add('displayNone');
        el.parentNode.removeChild(el);
    }
};

这正确地添加了淡入淡出类,然后在350ms后添加了“displayNone' class和deletes元素。 在mocha中,我可以模拟用jsdom点击元素并检查“淡出”'上课,但要等待350毫秒来检查“dislpayNone”#39;类。

我能找到的所有例子都与http请求的承诺相关,但我只想暂停 - 这里有解决方案吗?

2 个答案:

答案 0 :(得分:2)

你必须向mocha发出执行结束的信号:

describe('setTimeout test', function(){

 it('Use `done` callback', function(done){
   window.setTimeout(function(){
     // Assert here.
     done();
   }, 350);
 });

 it('Return promise', function(){
   return new Promise((resolve, reject) => window.setTimeout(function(){
     // Assert here.
     resolve();
   }, 350));
 });

});

答案 1 :(得分:0)

这是一个快速延迟功能,您可以使用它暂停350毫秒,然后在测试中断言您想要的内容。

function tryDelay(delayMs){
  var startMs = Date.now();
  var curMs = Date.now();

  while((startMs + delayMs) > curMs)
  {
    curMs = Date.now();
  }
}

tryDelay(350);