var assert = require('assert'); var throttle = require('./'); describe('throttle', function(){ function counter() { function count(){ count.invoked++; } count.invoked = 0; return count; } it('should throttle a function', function(done){ var count = counter(); var wait = 100; var total = 500; var fn = throttle(count, wait); var interval = setInterval(fn, 20); setTimeout(function(){ clearInterval(interval); assert(count.invoked === (total / wait)); done(); }, total + 5); }); it('should call the function last time', function(done){ var count = counter(); var wait = 100; var fn = throttle(count, wait); fn(); fn(); assert(count.invoked === 1); setTimeout(function(){ assert(count.invoked === 2); done(); }, wait + 5); }); it('should pass last context', function(done){ var wait = 100; var ctx; var fn = throttle(logctx, wait); var foo = {}; var bar = {}; fn.call(foo); fn.call(bar); assert(ctx === foo); setTimeout(function(){ assert(ctx === bar); done(); }, wait + 5); function logctx() { ctx = this; } }); it('should pass last arguments', function(done){ var wait = 100; var args; var fn = throttle(logargs, wait); fn.call(null, 1); fn.call(null, 2); assert(args && args[0] === 1); setTimeout(function(){ assert(args && args[0] === 2); done(); }, wait + 5); function logargs() { args = arguments; } }); });