0

不知何故,我无法为相对非常简单的功能编写 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个问题。

    1. 测试代码立即以 done() 结束
    1. 如果我不调用 done(),则调用该函数但测试失败,因为它希望为异步函数调用 done()

我查看了文档,但不确定如何做到这一点。

我可以使用 Promise 编写测试并且效果很好。但是对于我们需要使用setTimeout的场景,应该怎么做呢?

4

2 回答 2

1

假设您要测试的是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出于某种原因想调用,你可以在上面的匿名函数中调用,但是如果你想 test asn.cb,你应该从 testing 中单独调用asn.testfn

于 2017-02-26T08:15:02.417 回答
0
describe('Main Test', function(){
  it('A callback Tests', function(done){
    asn.testfn(function() {
        asn.cb();
        done();
    });
  });
});
于 2017-02-26T08:15:00.073 回答