refactor(Compiler): improve the error message on component load error
by adding the fetched url. relates to #1460
This commit is contained in:
parent
a504fa835e
commit
c60091b949
|
@ -36,8 +36,9 @@ export class DomCompiler extends RenderCompiler {
|
||||||
var tplPromise = this._templateLoader.load(template);
|
var tplPromise = this._templateLoader.load(template);
|
||||||
return PromiseWrapper.then(
|
return PromiseWrapper.then(
|
||||||
tplPromise, (el) => this._compileTemplate(template, el, ProtoViewDto.COMPONENT_VIEW_TYPE),
|
tplPromise, (el) => this._compileTemplate(template, el, ProtoViewDto.COMPONENT_VIEW_TYPE),
|
||||||
(_) => {
|
(e) => {
|
||||||
throw new BaseException(`Failed to load the template "${template.componentId}"`);
|
throw new BaseException(
|
||||||
|
`Failed to load the template for "${template.componentId}" : ${e}`);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -32,10 +32,14 @@ export class TemplateLoader {
|
||||||
var promise = StringMapWrapper.get(this._htmlCache, url);
|
var promise = StringMapWrapper.get(this._htmlCache, url);
|
||||||
|
|
||||||
if (isBlank(promise)) {
|
if (isBlank(promise)) {
|
||||||
promise = this._xhr.get(url).then(function(html) {
|
// TODO(vicb): change error when TS gets fixed
|
||||||
|
// https://github.com/angular/angular/issues/2280
|
||||||
|
// throw new BaseException(`Failed to fetch url "${url}"`);
|
||||||
|
promise = PromiseWrapper.then(this._xhr.get(url), html => {
|
||||||
var template = DOM.createTemplate(html);
|
var template = DOM.createTemplate(html);
|
||||||
return template;
|
return template;
|
||||||
});
|
}, _ => PromiseWrapper.reject(new BaseException(`Failed to fetch url "${url}"`), null));
|
||||||
|
|
||||||
StringMapWrapper.set(this._htmlCache, url, promise);
|
StringMapWrapper.set(this._htmlCache, url, promise);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -103,7 +103,8 @@ export function runCompilerCommonTests() {
|
||||||
PromiseWrapper.catchError(
|
PromiseWrapper.catchError(
|
||||||
compiler.compile(new ViewDefinition({componentId: 'someId', absUrl: 'someUrl'})),
|
compiler.compile(new ViewDefinition({componentId: 'someId', absUrl: 'someUrl'})),
|
||||||
(e) => {
|
(e) => {
|
||||||
expect(e.message).toContain(`Failed to load the template "someId"`);
|
expect(e.message).toEqual(
|
||||||
|
'Failed to load the template for "someId" : Failed to fetch url "someUrl"');
|
||||||
async.done();
|
async.done();
|
||||||
return null;
|
return null;
|
||||||
});
|
});
|
||||||
|
@ -208,9 +209,9 @@ class FakeTemplateLoader extends TemplateLoader {
|
||||||
|
|
||||||
if (isPresent(template.absUrl)) {
|
if (isPresent(template.absUrl)) {
|
||||||
var content = MapWrapper.get(this._urlData, template.absUrl);
|
var content = MapWrapper.get(this._urlData, template.absUrl);
|
||||||
if (isPresent(content)) {
|
return isPresent(content) ?
|
||||||
return PromiseWrapper.resolve(DOM.createTemplate(content));
|
PromiseWrapper.resolve(DOM.createTemplate(content)) :
|
||||||
}
|
PromiseWrapper.reject(`Failed to fetch url "${template.absUrl}"`, null);
|
||||||
}
|
}
|
||||||
|
|
||||||
return PromiseWrapper.reject('Load failed', null);
|
return PromiseWrapper.reject('Load failed', null);
|
||||||
|
|
|
@ -78,7 +78,7 @@ export function main() {
|
||||||
var template = new ViewDefinition({absUrl: 'base/foo'});
|
var template = new ViewDefinition({absUrl: 'base/foo'});
|
||||||
PromiseWrapper.then(loader.load(template), function(_) { throw 'Unexpected response'; },
|
PromiseWrapper.then(loader.load(template), function(_) { throw 'Unexpected response'; },
|
||||||
function(error) {
|
function(error) {
|
||||||
expect(error).toEqual('Failed to load base/foo');
|
expect(error.message).toEqual('Failed to fetch url "base/foo"');
|
||||||
async.done();
|
async.done();
|
||||||
});
|
});
|
||||||
xhr.flush();
|
xhr.flush();
|
||||||
|
|
Loading…
Reference in New Issue