fix(compiler): improve the error when template is not a string
Closes #8708 Closes #13377
This commit is contained in:
parent
5b4bea24de
commit
2c0c86e3ce
|
@ -65,10 +65,18 @@ export class DirectiveNormalizer {
|
|||
SyncAsyncResult<CompileTemplateMetadata> {
|
||||
let normalizedTemplateSync: CompileTemplateMetadata = null;
|
||||
let normalizedTemplateAsync: Promise<CompileTemplateMetadata>;
|
||||
if (prenormData.template) {
|
||||
if (prenormData.template != null) {
|
||||
if (typeof prenormData.template !== 'string') {
|
||||
throw new SyntaxError(
|
||||
`The template specified for component ${stringify(prenormData.componentType)} is not a string`);
|
||||
}
|
||||
normalizedTemplateSync = this.normalizeTemplateSync(prenormData);
|
||||
normalizedTemplateAsync = Promise.resolve(normalizedTemplateSync);
|
||||
} else if (prenormData.templateUrl) {
|
||||
if (typeof prenormData.templateUrl !== 'string') {
|
||||
throw new SyntaxError(
|
||||
`The templateUrl specified for component ${stringify(prenormData.componentType)} is not a string`);
|
||||
}
|
||||
normalizedTemplateAsync = this.normalizeTemplateAsync(prenormData);
|
||||
} else {
|
||||
throw new SyntaxError(
|
||||
|
|
|
@ -33,6 +33,22 @@ export function main() {
|
|||
moduleUrl: SOME_MODULE_URL,
|
||||
})).toThrowError(SyntaxError, 'No template specified for component SomeComp');
|
||||
}));
|
||||
it('should throw if template is not a string',
|
||||
inject([DirectiveNormalizer], (normalizer: DirectiveNormalizer) => {
|
||||
expect(
|
||||
() => normalizer.normalizeTemplate(
|
||||
{componentType: SomeComp, moduleUrl: SOME_MODULE_URL, template: <any>{}}))
|
||||
.toThrowError(
|
||||
SyntaxError, 'The template specified for component SomeComp is not a string');
|
||||
}));
|
||||
it('should throw if templateUrl is not a string',
|
||||
inject([DirectiveNormalizer], (normalizer: DirectiveNormalizer) => {
|
||||
expect(
|
||||
() => normalizer.normalizeTemplate(
|
||||
{componentType: SomeComp, moduleUrl: SOME_MODULE_URL, templateUrl: <any>{}}))
|
||||
.toThrowError(
|
||||
SyntaxError, 'The templateUrl specified for component SomeComp is not a string');
|
||||
}));
|
||||
});
|
||||
|
||||
describe('normalizeTemplateSync', () => {
|
||||
|
@ -535,4 +551,4 @@ function programResourceLoaderSpy(spy: SpyResourceLoader, results: {[key: string
|
|||
});
|
||||
}
|
||||
|
||||
class SomeComp {}
|
||||
class SomeComp {}
|
||||
|
|
Loading…
Reference in New Issue