summaryrefslogtreecommitdiffstats
path: root/tests/debounce.js
diff options
context:
space:
mode:
Diffstat (limited to 'tests/debounce.js')
-rw-r--r--tests/debounce.js71
1 files changed, 71 insertions, 0 deletions
diff --git a/tests/debounce.js b/tests/debounce.js
new file mode 100644
index 0000000..1c8bcf0
--- /dev/null
+++ b/tests/debounce.js
@@ -0,0 +1,71 @@
+import { debounce } from '..';
+import { expect } from 'chai';
+
+/*global describe,it*/
+
+describe('debounce()', () => {
+ it('should debounce when used as a simple decorator', next => {
+ let c = {
+ calls: 0,
+ args: null,
+
+ @debounce
+ foo(...args) {
+ c.calls++;
+ c.args = args;
+ c.context = this;
+ }
+ };
+
+ expect(c).to.have.property('calls', 0);
+ c.foo(1);
+ expect(c).to.have.property('calls', 0);
+ c.foo(2);
+ c.foo(3);
+ setTimeout( () => {
+ expect(c).to.have.property('calls', 1);
+ expect(c.args).to.deep.equal([3]);
+ expect(c.context).to.equal(c);
+
+ next();
+ }, 20);
+ });
+
+ it('should debounce when used as a function', next => {
+ let c = debounce( (...args) => {
+ m.calls++;
+ m.args = args;
+ }),
+ m = { calls:0, args:null };
+
+ expect(m).to.have.property('calls', 0);
+ c(1);
+ expect(m).to.have.property('calls', 0);
+ c(2);
+ c(3);
+ setTimeout( () => {
+ expect(m).to.have.property('calls', 1);
+ expect(m.args).to.deep.equal([3]);
+
+ next();
+ }, 20);
+ });
+
+ it('should support passing a delay', next => {
+ let c = debounce(5, (...args) => {
+ m.calls.push(args);
+ }),
+ m = { calls:[] };
+
+ c(1);
+ setTimeout(()=> c(2), 1);
+ setTimeout(()=> c(3), 10);
+ setTimeout(()=> c(4), 14);
+ setTimeout(()=> c(5), 22);
+ expect(m.calls).to.have.length(0);
+ setTimeout( () => {
+ expect(m.calls).to.deep.equal([ [2], [4], [5] ]);
+ next();
+ }, 30);
+ });
+});