@@ -10,7 +10,7 @@ import {LIFECYCLE_HOOKS_VALUES, LifecycleHooks} from '@angular/compiler/src/life
10
10
import { AfterContentChecked , AfterContentInit , AfterViewChecked , AfterViewInit , ChangeDetectionStrategy , Component , Directive , DoCheck , Injectable , NgModule , OnChanges , OnDestroy , OnInit , Pipe , SimpleChanges , ViewEncapsulation , ɵstringify as stringify } from '@angular/core' ;
11
11
import { TestBed , async , inject } from '@angular/core/testing' ;
12
12
13
- import { identifierName } from '../src/compile_metadata' ;
13
+ import { CompileDiDependencyMetadata , identifierName } from '../src/compile_metadata' ;
14
14
import { CompileMetadataResolver } from '../src/metadata_resolver' ;
15
15
import { ResourceLoader } from '../src/resource_loader' ;
16
16
import { MockResourceLoader } from '../testing/src/resource_loader_mock' ;
@@ -371,6 +371,38 @@ import {TEST_COMPILER_PROVIDERS} from './test_bindings';
371
371
. toThrowError ( `SimpleService cannot be used as an entry component.` ) ;
372
372
} ) ) ;
373
373
374
+ it ( 'should generate an error when a dependency could not be resolved' ,
375
+ inject ( [ CompileMetadataResolver ] , ( resolver : CompileMetadataResolver ) => {
376
+
377
+ // Override the errorCollector so that error gets collected instead of
378
+ // being thrown.
379
+ ( resolver as any ) . _errorCollector = ( error : Error , type ?: any ) => {
380
+ expect ( error . message ) . toBe ( `Can't resolve all parameters for MyComponent: (?).` ) ;
381
+ } ;
382
+
383
+ @Component ( { template : '' } )
384
+ class MyComponent {
385
+ // @ts -ignore UserService is a non-existent class.
386
+ constructor ( service : UserService ) { }
387
+ }
388
+
389
+ @NgModule ( { declarations : [ MyComponent ] } )
390
+ class AppModule {
391
+ }
392
+
393
+ const moduleMetadata = resolver . getNgModuleMetadata ( AppModule ) ! ;
394
+ expect ( moduleMetadata ) . toBeTruthy ( ) ;
395
+ expect ( moduleMetadata . declaredDirectives . length ) . toBe ( 1 ) ;
396
+ const directive = moduleMetadata . declaredDirectives [ 0 ] ;
397
+ const directiveMetadata =
398
+ resolver . getNonNormalizedDirectiveMetadata ( directive . reference ) ! ;
399
+ expect ( directiveMetadata ) . toBeTruthy ( ) ;
400
+ const { metadata} = directiveMetadata ;
401
+ const diDeps : CompileDiDependencyMetadata [ ] = metadata . type . diDeps ;
402
+ // 'null' does not conform to the shape of `CompileDiDependencyMetadata`
403
+ expect ( diDeps . every ( d => d !== null ) ) . toBe ( true ) ;
404
+ } ) ) ;
405
+
374
406
it ( `should throw an error when a Directive is added to module's bootstrap list` ,
375
407
inject ( [ CompileMetadataResolver ] , ( resolver : CompileMetadataResolver ) => {
376
408
0 commit comments