Skip to content

Commit a709dc1

Browse files
committed
adding an extra injector spec
- added a spec for dependency graph resolution - also simplyfying cache presence check
1 parent 65585a2 commit a709dc1

2 files changed

Lines changed: 27 additions & 1 deletion

File tree

src/Injector.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ function createInjector(providerScope, providers, cache) {
4343
return function inject(value, scope, args){
4444
var returnValue, provider;
4545
if (isString(value)) {
46-
if (!cache.hasOwnProperty(value)) {
46+
if (!(value in cache)) {
4747
provider = providers[value];
4848
if (!provider) throw "Unknown provider for '"+value+"'.";
4949
cache[value] = inject(provider, providerScope);

test/InjectorSpec.js

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,32 @@ describe('injector', function(){
4545
expect(scope).toEqual({mi:'Mi', name:'Misko'});
4646
});
4747

48+
49+
it('should resolve dependency graph and instantiate all services just once', function(){
50+
var log = [];
51+
52+
// s1
53+
// / |\
54+
// / s2\
55+
// / / | \\
56+
// /s3 < s4 > s5
57+
// //
58+
// s6
59+
60+
61+
providers('s1', function(){ log.push('s1'); }, {$inject: ['s2', 's5', 's6']});
62+
providers('s2', function(){ log.push('s2'); }, {$inject: ['s3', 's4', 's5']});
63+
providers('s3', function(){ log.push('s3'); }, {$inject: ['s6']});
64+
providers('s4', function(){ log.push('s4'); }, {$inject: ['s3', 's5']});
65+
providers('s5', function(){ log.push('s5'); });
66+
providers('s6', function(){ log.push('s6'); });
67+
68+
inject('s1');
69+
70+
expect(log).toEqual(['s6', 's3', 's5', 's4', 's2', 's1']);
71+
});
72+
73+
4874
it('should provide usefull message if no provider', function(){
4975
assertThrows("Unknown provider for 'idontexist'.", function(){
5076
inject('idontexist');

0 commit comments

Comments
 (0)