diff --git a/after.js b/after.js index d16b59638..b323f5a5f 100644 --- a/after.js +++ b/after.js @@ -19,6 +19,7 @@ function after(n, func) { if (typeof func != 'function') { throw new TypeError('Expected a function') } + n = n || 0 return function(...args) { if (--n < 1) { return func.apply(this, args) diff --git a/test/after.js b/test/after.js deleted file mode 100644 index cc7678f45..000000000 --- a/test/after.js +++ /dev/null @@ -1,31 +0,0 @@ -import assert from 'assert'; -import lodashStable from 'lodash'; -import { _ } from './utils.js'; - -describe('after', function() { - function after(n, times) { - var count = 0; - lodashStable.times(times, _.after(n, function() { count++; })); - return count; - } - - it('should create a function that invokes `func` after `n` calls', function() { - assert.strictEqual(after(5, 5), 1, 'after(n) should invoke `func` after being called `n` times'); - assert.strictEqual(after(5, 4), 0, 'after(n) should not invoke `func` before being called `n` times'); - assert.strictEqual(after(0, 0), 0, 'after(0) should not invoke `func` immediately'); - assert.strictEqual(after(0, 1), 1, 'after(0) should invoke `func` when called once'); - }); - - it('should coerce `n` values of `NaN` to `0`', function() { - assert.strictEqual(after(NaN, 1), 1); - }); - - it('should use `this` binding of function', function() { - var after = _.after(1, function() { return ++this.count; }), - object = { 'after': after, 'count': 0 }; - - object.after(); - assert.strictEqual(object.after(), 2); - assert.strictEqual(object.count, 2); - }); -}); diff --git a/test/after.test.js b/test/after.test.js new file mode 100644 index 000000000..ab509ecd1 --- /dev/null +++ b/test/after.test.js @@ -0,0 +1,31 @@ +import assert from 'assert'; +import lodashStable from 'lodash'; +import after from '../after.js'; + +describe('after', function() { + function testAfter(n, times) { + var count = 0; + lodashStable.times(times, after(n, function() { count++; })); + return count; + } + + it('should create a function that invokes `func` after `n` calls', function() { + assert.strictEqual(testAfter(5, 5), 1, 'after(n) should invoke `func` after being called `n` times'); + assert.strictEqual(testAfter(5, 4), 0, 'after(n) should not invoke `func` before being called `n` times'); + assert.strictEqual(testAfter(0, 0), 0, 'after(0) should not invoke `func` immediately'); + assert.strictEqual(testAfter(0, 1), 1, 'after(0) should invoke `func` when called once'); + }); + + it('should coerce `n` values of `NaN` to `0`', function() { + assert.strictEqual(testAfter(NaN, 1), 1); + }); + + it('should use `this` binding of function', function() { + var afterFn = after(1, function() { return ++this.count; }), + object = { 'after': afterFn, 'count': 0 }; + + object.after(); + assert.strictEqual(object.after(), 2); + assert.strictEqual(object.count, 2); + }); +});