2017-02-26 329 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(); 
    }); 
    }); 
});