feat(Binding): improve errors

fix #4358

Closes #4360
This commit is contained in:
Victor Berchet 2015-09-24 19:31:14 -07:00
parent 5bf6a3af15
commit 0319417a1b
3 changed files with 46 additions and 3 deletions

View File

@ -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});
}
}

View File

@ -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(<any>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(<any>0); })
.toThrowError('Trying to create a factory binding but "0" is not a function!');
});
});
});
}