feat(core): improve NoAnnotationError message

Closes #4866

Closes #5927
This commit is contained in:
vsavkin 2015-12-16 12:25:03 -08:00 committed by Victor Savkin
parent e67ebb7f70
commit 197cf09689
2 changed files with 19 additions and 5 deletions

View File

@ -222,8 +222,10 @@ export class NoAnnotationError extends BaseException {
signature.push(parameter.map(stringify).join(' ')); signature.push(parameter.map(stringify).join(' '));
} }
} }
return "Cannot resolve all parameters for " + stringify(typeOrFunc) + "(" + return "Cannot resolve all parameters for '" + stringify(typeOrFunc) + "'(" +
signature.join(', ') + "). " + 'Make sure they all have valid type or annotations.'; signature.join(', ') + "). " +
"Make sure that all the parameters are decorated with Inject or have valid type annotations and that '" +
stringify(typeOrFunc) + "' is decorated with Injectable.";
} }
} }

View File

@ -88,6 +88,8 @@ class NoAnnotations {
constructor(secretDependency) {} constructor(secretDependency) {}
} }
function factoryFn(a) {}
export function main() { export function main() {
var dynamicProviders = [ var dynamicProviders = [
provide('provider0', {useValue: 1}), provide('provider0', {useValue: 1}),
@ -142,10 +144,20 @@ export function main() {
expect(car.engine).toBeAnInstanceOf(TurboEngine); expect(car.engine).toBeAnInstanceOf(TurboEngine);
}); });
it('should throw when no type and not @Inject', () => { it('should throw when no type and not @Inject (class case)', () => {
expect(() => createInjector([NoAnnotations])) expect(() => createInjector([NoAnnotations]))
.toThrowError('Cannot resolve all parameters for NoAnnotations(?). ' + .toThrowError(
'Make sure they all have valid type or annotations.'); "Cannot resolve all parameters for 'NoAnnotations'(?). " +
'Make sure that all the parameters are decorated with Inject or have valid type annotations ' +
"and that 'NoAnnotations' is decorated with Injectable.");
});
it('should throw when no type and not @Inject (factory case)', () => {
expect(() => createInjector([provide("someToken", {useFactory: factoryFn})]))
.toThrowError(
"Cannot resolve all parameters for 'factoryFn'(?). " +
'Make sure that all the parameters are decorated with Inject or have valid type annotations ' +
"and that 'factoryFn' is decorated with Injectable.");
}); });
it('should cache instances', () => { it('should cache instances', () => {