diff --git a/modules/@angular/compiler/test/template_parser/template_parser_spec.ts b/modules/@angular/compiler/test/template_parser/template_parser_spec.ts index 7e4be2c9a9..733c804cfc 100644 --- a/modules/@angular/compiler/test/template_parser/template_parser_spec.ts +++ b/modules/@angular/compiler/test/template_parser/template_parser_spec.ts @@ -684,7 +684,7 @@ export function main() { expect(elAst.providers[0].providers).toEqual([dirProvider]); }); - it('should throw if mixing multi and non multi providers', () => { + it('if mixing multi and non multi providers', () => { var provider0 = createProvider('service0'); var provider1 = createProvider('service0', {multi: true}); var dirA = createDir('[dirA]', {providers: [provider0]}); diff --git a/modules/@angular/core/src/application_ref.ts b/modules/@angular/core/src/application_ref.ts index a92e9f84b4..1a4220d1b2 100644 --- a/modules/@angular/core/src/application_ref.ts +++ b/modules/@angular/core/src/application_ref.ts @@ -313,7 +313,10 @@ export class PlatformRef_ extends PlatformRef { const ngZoneInjector = ReflectiveInjector.resolveAndCreate([{provide: NgZone, useValue: ngZone}], this.injector); const moduleRef = moduleFactory.create(ngZoneInjector); - const exceptionHandler: ExceptionHandler = moduleRef.injector.get(ExceptionHandler); + const exceptionHandler: ExceptionHandler = moduleRef.injector.get(ExceptionHandler, null); + if (!exceptionHandler) { + throw new Error('No ExceptionHandler. Is platform module (BrowserModule) included?'); + } ObservableWrapper.subscribe(ngZone.onError, (error: NgZoneError) => { exceptionHandler.call(error.error, error.stackTrace); }); diff --git a/modules/@angular/core/test/application_ref_spec.ts b/modules/@angular/core/test/application_ref_spec.ts index f1e9a80535..daed5942e6 100644 --- a/modules/@angular/core/test/application_ref_spec.ts +++ b/modules/@angular/core/test/application_ref_spec.ts @@ -141,6 +141,18 @@ export function main() { expect(errorLogger.res).toEqual(['EXCEPTION: Test']); }); })); + + it('should throw useful error when ApplicationRef is not configured', async(() => { + @NgModule() + class EmptyModule { + } + + return defaultPlatform.bootstrapModule(EmptyModule) + .then(() => fail('expecting error'), (error) => { + expect(error.message) + .toEqual('No ExceptionHandler. Is platform module (BrowserModule) included?'); + }); + })); }); describe('bootstrapModuleFactory', () => { diff --git a/tools/tsc-watch/index.ts b/tools/tsc-watch/index.ts index 558bd45ad6..0a17718688 100644 --- a/tools/tsc-watch/index.ts +++ b/tools/tsc-watch/index.ts @@ -65,54 +65,61 @@ const BaseConfig = { }; if (platform == 'node') { - tscWatch = new TscWatch(Object.assign({ - tsconfig: 'modules/tsconfig.json', - onChangeCmds: [ - processOutputEmitterCodeGen, - [ - 'node', 'dist/tools/cjs-jasmine', '--', '{@angular,benchpress}/**/*_spec.js', - '@angular/compiler-cli/test/**/*_spec.js' - ] - ] - }, BaseConfig)); + tscWatch = new TscWatch(Object.assign( + { + tsconfig: 'modules/tsconfig.json', + onChangeCmds: [ + processOutputEmitterCodeGen, + [ + 'node', 'dist/tools/cjs-jasmine', '--', '{@angular,benchpress}/**/*_spec.js', + '@angular/compiler-cli/test/**/*_spec.js' + ] + ] + }, + BaseConfig)); } else if (platform == 'browser') { - tscWatch = new TscWatch(Object.assign({ - tsconfig: 'modules/tsconfig.json', - onStartCmds: [ - [ - 'node', 'node_modules/karma/bin/karma', 'start', '--no-auto-watch', '--port=9876', - 'karma-js.conf.js' - ], - [ - 'node', 'node_modules/karma/bin/karma', 'start', '--no-auto-watch', '--port=9877', - 'modules/@angular/router/karma.conf.js' - ], - ], - onChangeCmds: [ - ['node', 'node_modules/karma/bin/karma', 'run', 'karma-js.conf.js', '--port=9876'], - ['node', 'node_modules/karma/bin/karma', 'run', '--port=9877'], - ] - }, BaseConfig)); + tscWatch = new TscWatch(Object.assign( + { + tsconfig: 'modules/tsconfig.json', + onStartCmds: [ + [ + 'node', 'node_modules/karma/bin/karma', 'start', '--no-auto-watch', '--port=9876', + 'karma-js.conf.js' + ], + [ + 'node', 'node_modules/karma/bin/karma', 'start', '--no-auto-watch', '--port=9877', + 'modules/@angular/router/karma.conf.js' + ], + ], + onChangeCmds: [ + ['node', 'node_modules/karma/bin/karma', 'run', 'karma-js.conf.js', '--port=9876'], + ['node', 'node_modules/karma/bin/karma', 'run', '--port=9877'], + ] + }, + BaseConfig)); } else if (platform == 'browserNoRouter') { - tscWatch = new TscWatch(Object.assign({ - tsconfig: 'modules/tsconfig.json', - onStartCmds: [ - [ - 'node', 'node_modules/karma/bin/karma', 'start', '--no-auto-watch', '--port=9876', - 'karma-js.conf.js' - ] - ], - onChangeCmds: [ - ['node', 'node_modules/karma/bin/karma', 'run', 'karma-js.conf.js', '--port=9876'], - ] - }, BaseConfig)); + tscWatch = new TscWatch(Object.assign( + { + tsconfig: 'modules/tsconfig.json', + onStartCmds: [[ + 'node', 'node_modules/karma/bin/karma', 'start', '--no-auto-watch', '--port=9876', + 'karma-js.conf.js' + ]], + onChangeCmds: [ + ['node', 'node_modules/karma/bin/karma', 'run', 'karma-js.conf.js', '--port=9876'], + ] + }, + BaseConfig)); } else if (platform == 'tools') { - tscWatch = new TscWatch(Object.assign({ - tsconfig: 'tools/tsconfig.json', - onChangeCmds: [[ - 'node', 'dist/tools/cjs-jasmine/index-tools', '--', '@angular/tsc-wrapped/**/*{_,.}spec.js' - ]] - }, BaseConfig)); + tscWatch = new TscWatch(Object.assign( + { + tsconfig: 'tools/tsconfig.json', + onChangeCmds: [[ + 'node', 'dist/tools/cjs-jasmine/index-tools', '--', + '@angular/tsc-wrapped/**/*{_,.}spec.js' + ]] + }, + BaseConfig)); } else { throw new Error(`unknown platform: ${platform}`); }