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
(不调用realrequestAnimationFrame
)?另外,我知道“IO操作和异常”可能会导致下一个动画帧(在函数完成之前),但我不知道如何准确地在这里使用它…非常感谢!但是“注意:如果您的任务不使用任何计时器或执行任何I/O,它们实际上将以串联方式执行。”因此,这是另一个问题,可能与我的尝试相同。我过一天再试试。谢谢,@nir-levy