Javascript 测试同一函数的并发调用

Javascript 测试同一函数的并发调用,javascript,node.js,unit-testing,concurrency,Javascript,Node.js,Unit Testing,Concurrency,我有一个功能: var inRendering = false; function render() { if (inRendering) { requestAnimationFrame(render); } else { inRendering = true; requestAnimationFrame(function () { longAction(); inRendering = false; }); } } 我必须对

我有一个功能:

var inRendering = false;
function render() {
  if (inRendering) {
    requestAnimationFrame(render);
  } else {
    inRendering = true;
    requestAnimationFrame(function () {
      longAction();
      inRendering = false;
    });
  }
}
我必须对它进行单元测试。测试并发调用
render
的情况

请帮帮我好吗?这样的并发调用在JavaScript中可能吗?谢谢


另外,我写了一个显然不起作用的测试(见注释):

您可以使用异步模块,特别是为了并行运行两个函数

例如:

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.
});

你需要写一个异步测试。你说的@SLaks到底是什么意思?我的测试尝试是异步的(但没有WebWorkers),您并没有真正尝试测试同一函数的并发调用。JS是单线程的,因此您可以对同一个函数进行递归调用,但除了递归调用之外,函数的第一次调用将在另一个函数开始之前完成。您希望测试在调用第一次调用render的内部函数之前是否再次调用外部函数(render)。为了测试这一点,您需要模拟requestAnimationFrame,以便在测试期间可以控制它。。。你希望inRendering=true;requestAnimationFrame(函数(){…inRendering=false;});当您调用requestAnimationFrame时,而不是从rAF调用时,您需要发出已请求渲染的信号。@neonstalwart是的,关于bug,您是对的。非常感谢!您是否建议完全模拟
requestAnimationFrame
(不调用real
requestAnimationFrame
)?另外,我知道“IO操作和异常”可能会导致下一个动画帧(在函数完成之前),但我不知道如何准确地在这里使用它…非常感谢!但是“注意:如果您的任务不使用任何计时器或执行任何I/O,它们实际上将以串联方式执行。”因此,这是另一个问题,可能与我的尝试相同。我过一天再试试。谢谢,@nir-levy