2016-01-18 60 views
1

的一致呼叫我有一个函数:测试相同功能

var inRendering = false; 
function render() { 
    if (inRendering) { 
    requestAnimationFrame(render); 
    } else { 
    inRendering = true; 
    requestAnimationFrame(function() { 
     longAction(); 
     inRendering = false; 
    }); 
    } 
} 

我有单元测试它。测试并发呼叫render的情况。

请帮帮我吗?这种并发呼叫在JavaScript中是否可行?谢谢。

P.S.我写这显然是行不通的(见注释)测试:https://gist.github.com/kuraga/b0aa3d66fc0620f03b11

+0

你需要编写一个异步测试。 – SLaks

+0

你的意思是@SLaks,究竟是什么意思?我的测试尝试是异步的(但没有WebWorkers) – Kuraga

+1

你并不是真的想要测试同一个函数的并发调用。 JS是单线程的,因此您可以对同一个函数进行递归调用,但除了递归调用之外,函数的第一个调用将在另一个调用开始之前完成。你想测试是否在第一次调用渲染的内部函数被调用之前再次调用外部函数(render)。为了测试这个,你可以模拟requestAnimationFrame,以便在测试过程中控制这个。 – neonstalwart

回答

1

你可以使用异步模块,具体async.parallel,以运行两个功能并行

例如:

async.parallel([ 
    function(callback){ 
     // run your function once 
    }, 
    function(callback){ 
     // run your function the second time 
    } 
], 
// optional callback 
function(err, results){ 
    // the results array will equal ['one','two'] even though 
    // the second function had a shorter timeout. 
}); 
+0

非常感谢!但是“注意:如果你的任务不使用任何定时器或执行任何I/O,它们实际上将被串行执行。”所以,这是另一个问题,也许和我的尝试一样。我会在一天中尝试。谢谢,@ nir-levy – Kuraga