为使用 setTimeout() 的异步函数编写 Mocha 测试

Writing Mocha Test for Async functions which uses setTimeout()

不知何故,我无法为一个相对非常简单的函数编写 Mocha JS 测试。 JavaScript 源文件如下所示

exports.cb = function() {
    console.log("The function is called after 3 seconds");
}

exports.testfn = function(cb) {
  setTimeout(cb, 3000);
}

而测试代码写成

describe('Main Test', function(){
  it('A callback Tests', function(done){
    asn.testfn(asn.cb);
    done();
  });
});

我遇到了 2 个问题。

我查看了文档,但不确定如何完成。

我可以使用 promises 编写测试,而且效果很好。但是对于需要用到setTimeout的场景,应该怎么设置呢?

describe('Main Test', function(){
  it('A callback Tests', function(done){
    asn.testfn(function() {
        asn.cb();
        done();
    });
  });
});

假设你要测试的是testfn,你不会使用cb,你会在测试中使用回调;看评论:

describe('Main Test', function(){
  it('testfn calls the function after three seconds', function(done){
    // Remember the start time
    var start = Date.now();
    // Schedule callback
    asn.testfn(function() {
        // Has it been at least three seconds?
        if (Date.now() - start < 3000) {
            // No, trigger an error
        } else {
            // Yes, all's good!
            done();
        }
    });
  });
});

如果你出于某种原因想调用 asn.cb,你可以在上面的匿名函数中调用,但如果你想测试 asn.cb,你应该从测试 asn.testfn.