diff --git a/packages/xo-collection/src/collection.js b/packages/xo-collection/src/collection.js index 9fdf2f81e..19eda32d4 100644 --- a/packages/xo-collection/src/collection.js +++ b/packages/xo-collection/src/collection.js @@ -240,4 +240,12 @@ export default class Collection extends EventEmitter { get all () { return this._items } + + * [Symbol.iterator] () { + const {_items: items} = this + + for (let key in items) { + yield items[key] + } + } } diff --git a/packages/xo-collection/src/collection.spec.js b/packages/xo-collection/src/collection.spec.js index d5d9b7207..03f36d153 100644 --- a/packages/xo-collection/src/collection.spec.js +++ b/packages/xo-collection/src/collection.spec.js @@ -36,6 +36,13 @@ describe('Collection', function () { return waitTicks() }) + it('is iterable', function () { + const iterator = this.col[Symbol.iterator]() + + expect(iterator.next()).to.eql({done: false, value: 0}) + expect(iterator.next()).to.eql({done: true, value: undefined}) + }) + describe('#add()', function () { it('adds item to the collection', function () { const spy = sinon.spy()