Просмотр исходного кода

Merge pull request #1145 from karevn/dev

Debounce filter & tests
Evan You 10 лет назад
Родитель
Сommit
762077b8ec
2 измененных файлов с 33 добавлено и 0 удалено
  1. 8 0
      src/filters/index.js
  2. 25 0
      test/unit/specs/filters/filters_spec.js

+ 8 - 0
src/filters/index.js

@@ -130,6 +130,14 @@ exports.key = function (handler, key) {
 // expose keycode hash
 exports.key.keyCodes = keyCodes
 
+exports.debounce = function (handler, delay) {
+  if (!handler) return
+  if (!delay) {
+    delay = 300
+  }
+  return _.debounce(handler, delay)
+}
+
 /**
  * Install special array filters
  */

+ 25 - 0
test/unit/specs/filters/filters_spec.js

@@ -98,6 +98,31 @@ describe('Filters', function () {
     expect(spy).toHaveBeenCalled()
   })
 
+  it('debounce', function (done) {
+    var filter = filters.debounce
+    expect(filter(null)).toBeUndefined()
+    var spy = jasmine.createSpy('filter:debounce')
+    var handler = filter(spy)
+    handler()
+    expect(spy).not.toHaveBeenCalled()
+    handler = filter(spy)
+    handler()
+    setTimeout(function () {
+      expect(spy).toHaveBeenCalled()
+    }, 400)
+    var spy2 = jasmine.createSpy('filter:debounce')
+    handler = filter(spy2, 450)
+    handler()
+    handler()
+    setTimeout(function () {
+      expect(spy2).not.toHaveBeenCalled()
+    }, 400)
+    setTimeout(function () {
+      expect(spy2.calls.count()).toBe(1)
+      done()
+    }, 500)
+  })
+
   it('filterBy', function () {
     var filter = filters.filterBy
     var arr = [