diff --git a/lib/environment.js b/lib/environment.js index 12c3ea34..1f623834 100644 --- a/lib/environment.js +++ b/lib/environment.js @@ -242,11 +242,12 @@ class Environment extends EventEmitter { * functions under the provided namespace. `registerStub` will enforce the function passed * to extend the Base generator automatically. * - * @param {Function} Generator - A Generator constructor or a simple function - * @param {String} namespace - Namespace under which register the generator + * @param {Function} Generator - A Generator constructor or a simple function + * @param {String} namespace - Namespace under which register the generator + * @param {String} [resolved] - The file path to the generator * @return {this} */ - registerStub(Generator, namespace) { + registerStub(Generator, namespace, resolved) { if (typeof Generator !== 'function') { return this.error(new Error('You must provide a stub function to register.')); } @@ -255,7 +256,7 @@ class Environment extends EventEmitter { return this.error(new Error('You must provide a namespace to register.')); } - this.store.add(namespace, Generator); + this.store.add(namespace, Generator, resolved); return this; } diff --git a/lib/store.js b/lib/store.js index 83afa8ae..fa6232bd 100644 --- a/lib/store.js +++ b/lib/store.js @@ -15,16 +15,17 @@ class Store { /** * Store a module under the namespace key - * @param {String} namespace - The key under which the generator can be retrieved - * @param {String|Function} generator - A generator module or a module path + * @param {String} namespace - The key under which the generator can be retrieved + * @param {String|Function} generator - A generator module or a module path + * @param {String} [resolved] - The file path to the generator (used only if generator is a module) */ - add(namespace, generator) { + add(namespace, generator, resolved) { if (typeof generator === 'string') { this._storeAsPath(namespace, generator); return; } - this._storeAsModule(namespace, generator); + this._storeAsModule(namespace, generator, resolved); } _storeAsPath(namespace, path) { @@ -43,9 +44,9 @@ class Store { }); } - _storeAsModule(namespace, Generator) { + _storeAsModule(namespace, Generator, resolved = 'unknown') { this._meta[namespace] = { - resolved: 'unknown', + resolved, namespace }; diff --git a/test/environment.js b/test/environment.js index ac9461a6..d679d86c 100644 --- a/test/environment.js +++ b/test/environment.js @@ -322,17 +322,23 @@ describe('Environment', () => { describe('#registerStub()', () => { beforeEach(function () { this.simpleDummy = sinon.spy(); + this.resolvedDummy = sinon.spy(); this.completeDummy = function () {}; util.inherits(this.completeDummy, Generator); this.env .registerStub(this.simpleDummy, 'dummy:simple') - .registerStub(this.completeDummy, 'dummy:complete'); + .registerStub(this.completeDummy, 'dummy:complete') + .registerStub(this.resolvedDummy, 'dummy:resolved', 'dummy/path'); }); it('register a function under a namespace', function () { assert.equal(this.completeDummy, this.env.get('dummy:complete')); }); + it('registers the resolved path', function () { + assert.equal('dummy/path', this.env.get('dummy:resolved').resolved); + }); + it('throws if invalid generator', function () { assert.throws(this.env.registerStub.bind(this.env, [], 'dummy'), /stub\sfunction/); }); diff --git a/test/store.js b/test/store.js index 4303b8a5..fc83df7d 100644 --- a/test/store.js +++ b/test/store.js @@ -16,7 +16,7 @@ describe('Store', () => { describe('storing as module', () => { beforeEach(function () { - this.store.add('foo:module', this.module); + this.store.add('foo:module', this.module, '/foo/path'); this.outcome = this.store.get('foo:module'); }); @@ -26,10 +26,7 @@ describe('Store', () => { it('assign meta data to the module', function () { assert.equal(this.outcome.namespace, 'foo:module'); - }); - - it('assign dummy resolved value (can\'t determine the path of an instantiated)', function () { - assert.ok(this.outcome.resolved.length > 0); + assert.equal(this.outcome.resolved, '/foo/path'); }); });