diff options
Diffstat (limited to 'test/InjectorSpec.js')
| -rw-r--r-- | test/InjectorSpec.js | 71 |
1 files changed, 71 insertions, 0 deletions
diff --git a/test/InjectorSpec.js b/test/InjectorSpec.js new file mode 100644 index 00000000..ba0f27f7 --- /dev/null +++ b/test/InjectorSpec.js @@ -0,0 +1,71 @@ +describe('injector', function(){ + var providers; + var cache; + var inject; + var scope; + + beforeEach(function(){ + providers = extensionMap({}, 'providers'); + cache = {}; + scope = {}; + inject = createInjector(scope, providers, cache); + }); + + it("should return same instance from calling provider", function(){ + providers('text', function(){ return scope.name; }); + scope.name = 'abc'; + expect(inject('text')).toEqual('abc'); + expect(cache.text).toEqual('abc'); + scope.name = 'deleted'; + expect(inject('text')).toEqual('abc'); + }); + + it("should return an array of instances", function(){ + cache.a = 0; + providers('b', function(){return 2;}); + expect(inject(['a', 'b'])).toEqual([0,2]); + }); + + it("should call function", function(){ + providers('a', function(){return 1;}); + providers('b', function(){return 2;}); + var args; + function fn(a, b, c, d) { + args = [this, a, b, c, d]; + } + fn.$inject = ['a', 'b']; + inject(fn, {name:"this"}, 3, 4); + expect(args).toEqual([{name:'this'}, 1, 2, 3, 4]); + }); + + it('should inject providers', function(){ + providers('a', function(){return this.mi = 'Mi';}); + providers('b', function(mi){return this.name = mi+'sko';}, {$inject:['a']}); + expect(inject('b')).toEqual('Misko'); + expect(scope).toEqual({mi:'Mi', name:'Misko'}); + }); + + it('should provide usefull message if no provider', function(){ + assertThrows("Unknown provider for 'idontexist'.", function(){ + inject('idontexist'); + }); + }); + + it('should autostart eager services', function(){ + var log = ''; + providers('eager', function(){log += 'eager;';}, {$creation: 'eager'}); + inject(); + expect(log).toEqual('eager;'); + expect(scope.eager).not.toBeDefined(); + }); + + + it('should return a list of published objects', function(){ + var log = ''; + providers('eager', function(){log += 'eager;'; return 'pub'; }, {$creation: 'eager-published'}); + inject(); + expect(log).toEqual('eager;'); + expect(scope.eager).toEqual('pub'); + + }); +});
\ No newline at end of file |
