javascript - 使用 setTimeout 测试 IIFE

标签 javascript node.js unit-testing sinon

测试使用 setTimeout 递归调用自身的 IIFE(立即调用函数表达式)的最佳方法是什么:

(function myFuncToBeTested() {
  // Code to be tested 
  ...
  setTimeout(myFuncToBeTested, timeout) // timeout should be checked
})()

我找到了以下解决方案,用自己的 stub 替换全局setTimeout函数。这有以下问题:

// Saving original setTimeout. This should be restored in test cleanup
originalSetTimeout = global.setTimeout

// Replace  with function
global.setTimeout = function setImmediate(myFunc, interval) {
   // FIXME: This function now always called

   // Save interval to be tested
   savedInterval = interval
}

最佳答案

这个函数可以做成一个对象吗?

var myObject = (function(){

    function start(){
        myFuncToBeTested();       
        setTimeout(start, 10);
        return this;
    }

    function myFunctToBeTested(){
        //Code to be tested
    }

    return {
        start: start,
        myFuncToBeTested: myFuncToBeTested
    }
})().start();

然后您可以使用您选择的测试框架来测试:

assert( myObject.myFuncToBeTested() == expectedValue );

关于javascript - 使用 setTimeout 测试 IIFE,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34277043/

相关文章:

node.js - 如何在node.js中集成FCM以进行推送通知?

java - 如何从命令行运行 JUnit 测试用例

javascript - 为什么 `search` 返回 -1 而不是 undefined 或 null

node.js - 将 Mongoose 查询结果存储在另一个 Mongoose 查询中

node.js - NodeJS 子进程太多?

android - 如何对特定的 JUnit 测试用例执行 @After?

单元测试自定义 CLion 插件

javascript - 下一个JS : How to send data from one page to another page's getInitialProps function

javascript - Redux 和 Socket IO 代理错误

javascript - JQuery AJAX 请求语法问题(混合 vanilla JS 函数)