Skip to content

Commit

Permalink
fix(throttle): Fix error in Fn.throttle that broke MouseTimeDisplay (#…
Browse files Browse the repository at this point in the history
…3833)

We were not initializing `last` properly in the throttle function.
  • Loading branch information
misteroneill authored and gkatsev committed Dec 5, 2016
1 parent 766580a commit 014c6b8
Show file tree
Hide file tree
Showing 2 changed files with 35 additions and 2 deletions.
2 changes: 1 addition & 1 deletion src/js/utils/fn.js
Original file line number Diff line number Diff line change
Expand Up @@ -55,7 +55,7 @@ export const bind = function(context, fn, uid) {
* @return {Function}
*/
export const throttle = function(fn, wait) {
let last;
let last = Date.now();

const throttled = function(...args) {
const now = Date.now();
Expand Down
35 changes: 34 additions & 1 deletion test/unit/utils/fn.test.js
Original file line number Diff line number Diff line change
@@ -1,7 +1,15 @@
/* eslint-env qunit */
import sinon from 'sinon';
import * as Fn from '../../../src/js/utils/fn.js';

QUnit.module('fn');
QUnit.module('fn', {
beforeEach() {
this.clock = sinon.useFakeTimers();
},
afterEach() {
this.clock.restore();
}
});

QUnit.test('should add context to a function', function(assert) {
const newContext = { test: 'obj'};
Expand All @@ -12,3 +20,28 @@ QUnit.test('should add context to a function', function(assert) {

fdsa();
});

QUnit.test('should throttle functions properly', function(assert) {
const tester = sinon.spy();
const throttled = Fn.throttle(tester, 100);

// We must wait a full wait period before the function can be called.
this.clock.tick(100);
throttled();
throttled();
this.clock.tick(50);
throttled();

assert.strictEqual(tester.callCount, 1, 'the throttled function has been called the correct number of times');

this.clock.tick(50);
throttled();

assert.strictEqual(tester.callCount, 2, 'the throttled function has been called the correct number of times');

throttled();
this.clock.tick(100);
throttled();

assert.strictEqual(tester.callCount, 3, 'the throttled function has been called the correct number of times');
});

0 comments on commit 014c6b8

Please sign in to comment.