2017-02-26 598 views
0

不知何故,我无法为相对非常简单的函数编写Mocha JS测试。 JavaScript源文件看起来像这样为使用setTimeout的异步函数编写摩卡测试()

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()
  • 如果我不叫做(),则该函数被调用,但立即结束测试,因为它预期调用完成()用于异步功能

我看着单证,但不知道如何CA失败ñ完成。

我可以使用承诺编写测试,它工作正常。但对于我们需要使用setTimeout的场景,它将如何完成?

+0

你想要测试什么? 'testfn'或'cb'? –

回答

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出于某种原因,你会做它在匿名函数以上,但如果你想测试asn.cb,你应该做的serparately从测试asn.testfn

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