mocha 在测试 setTimeout 函数之前等待

mocha wait before testing a setTimeout function

我有一个函数在稍微延迟后调用另一个函数:

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

这会正确添加淡入淡出 class,然后在 350 毫秒后添加 'displayNone' class 并删除元素。 在 mocha 中,我可以模拟用 jsdom 单击元素并检查 'fade' class,但要等待 350 毫秒来检查 'dislpayNone' class。

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

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

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

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

tryDelay(350);

你必须向 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));
 });

});