From 51adf1a3d85da8c9f5b6aa4517fb47c7f0813041 Mon Sep 17 00:00:00 2001 From: Miroslav Jancarik Date: Fri, 2 Dec 2016 11:01:48 +0100 Subject: [PATCH] #! The bind method use previous binded alias entry --- ObjectContainer.js | 8 +++++--- __tests__/ObjectContainerSpec.js | 20 ++++++++++++++++++++ 2 files changed, 25 insertions(+), 3 deletions(-) diff --git a/ObjectContainer.js b/ObjectContainer.js index 386fa80f..af10b8f9 100644 --- a/ObjectContainer.js +++ b/ObjectContainer.js @@ -139,12 +139,14 @@ export default class ObjectContainer { } let classConstructorEntry = this._entries.get(classConstructor); + let nameEntry = this._entries.get(name); + let entry = classConstructorEntry || nameEntry; - if (classConstructorEntry) { - this._entries.set(name, classConstructorEntry); + if (entry) { + this._entries.set(name, entry); if (dependencies) { - this._updateEntryValues(classConstructorEntry, classConstructor, dependencies); + this._updateEntryValues(entry, classConstructor, dependencies); } } else { diff --git a/__tests__/ObjectContainerSpec.js b/__tests__/ObjectContainerSpec.js index d4131741..2f7124ea 100644 --- a/__tests__/ObjectContainerSpec.js +++ b/__tests__/ObjectContainerSpec.js @@ -202,6 +202,26 @@ describe('ima.ObjectContainer', function() { expect(oc._entries.get(alias)).toEqual(oc._entries.get(classParent)); }); + it('should use entry from entries which was provided and binded', function() { + oc.provide(classParent, classConstructor, dependencies); + oc.bind(alias, classParent); + var aliasEntry = oc._entries.get(alias); + + spyOn(oc, '_updateEntryValues') + .and + .callThrough(); + + oc.bind(alias, classConstructorWithDependencies, classConstructorWithDependencies.$dependencies); + + expect(oc._updateEntryValues).toHaveBeenCalledWith( + aliasEntry, + classConstructorWithDependencies, + classConstructorWithDependencies.$dependencies + ); + expect(aliasEntry.classConstructor).toEqual(classConstructorWithDependencies); + expect(aliasEntry.dependencies).toEqual(classConstructorWithDependencies.$dependencies); + }); + }); describe('provide method', function() {