diff --git a/modules/angular2/src/core/di/binding.ts b/modules/angular2/src/core/di/binding.ts index c1177af567..ab8b0e97da 100644 --- a/modules/angular2/src/core/di/binding.ts +++ b/modules/angular2/src/core/di/binding.ts @@ -6,6 +6,8 @@ import { CONST_EXPR, stringify, isArray, + isType, + isFunction, normalizeBool } from 'angular2/src/core/facade/lang'; import {BaseException, WrappedException} from 'angular2/src/core/facade/exceptions'; @@ -344,7 +346,13 @@ export class BindingBuilder { * expect(injectorAlias.get(Vehicle) instanceof Car).toBe(true); * ``` */ - toClass(type: Type): Binding { return new Binding(this.token, {toClass: type}); } + toClass(type: Type): Binding { + if (!isType(type)) { + throw new BaseException( + `Trying to create a class binding but "${stringify(type)}" is not a class!`); + } + return new Binding(this.token, {toClass: type}); + } /** * Binds a DI token to a value. @@ -416,8 +424,12 @@ export class BindingBuilder { * expect(injector.get(String)).toEqual('Value: 3'); * ``` */ - toFactory(factoryFunction: Function, dependencies?: any[]): Binding { - return new Binding(this.token, {toFactory: factoryFunction, deps: dependencies}); + toFactory(factory: Function, dependencies?: any[]): Binding { + if (!isFunction(factory)) { + throw new BaseException( + `Trying to create a factory binding but "${stringify(factory)}" is not a function!`); + } + return new Binding(this.token, {toFactory: factory, deps: dependencies}); } } diff --git a/modules/angular2/test/core/di/binding_dart_spec.dart b/modules/angular2/test/core/di/binding_spec.dart similarity index 100% rename from modules/angular2/test/core/di/binding_dart_spec.dart rename to modules/angular2/test/core/di/binding_spec.dart diff --git a/modules/angular2/test/core/di/binding_spec.ts b/modules/angular2/test/core/di/binding_spec.ts new file mode 100644 index 0000000000..daedbb23fb --- /dev/null +++ b/modules/angular2/test/core/di/binding_spec.ts @@ -0,0 +1,31 @@ +import { + AsyncTestCompleter, + beforeEach, + ddescribe, + describe, + expect, + iit, + inject, + it, + xit, +} from 'angular2/test_lib'; + +import {bind} from 'angular2/core'; + +export function main() { + describe('binding', () => { + + describe('type errors', () => { + + it('should throw when trying to create a class binding and not passing a class', () => { + expect(() => { bind('foo').toClass(0); }) + .toThrowError('Trying to create a class binding but "0" is not a class!'); + }); + + it('should throw when trying to create a factory binding and not passing a function', () => { + expect(() => { bind('foo').toFactory(0); }) + .toThrowError('Trying to create a factory binding but "0" is not a function!'); + }); + }); + }); +}