1
1
/* eslint-disable @angular-eslint/component-selector */
2
2
import {
3
3
Component ,
4
+ createNgModule ,
5
+ EnvironmentInjector ,
4
6
InjectionToken ,
5
7
Injector ,
8
+ NgModule ,
9
+ NgModuleRef ,
6
10
StaticProvider ,
7
11
Type ,
8
12
} from '@angular/core' ;
@@ -21,6 +25,8 @@ describe('DynamicComponent', () => {
21
25
[ndcDynamicInjector]="injector"
22
26
[ndcDynamicProviders]="providers"
23
27
[ndcDynamicContent]="content"
28
+ [ndcDynamicNgModuleRef]="ngModuleRef"
29
+ [ndcDynamicEnvironmentInjector]="environmentInjector"
24
30
(ndcDynamicCreated)="createdComponent($event)"
25
31
></ndc-dynamic>` ,
26
32
} )
@@ -29,6 +35,8 @@ describe('DynamicComponent', () => {
29
35
injector ?: Injector ;
30
36
providers ?: StaticProvider [ ] ;
31
37
content ?: Node [ ] [ ] ;
38
+ ngModuleRef ?: NgModuleRef < unknown > ;
39
+ environmentInjector ?: EnvironmentInjector | NgModuleRef < unknown > ;
32
40
createdComponent = jest . fn ( ) ;
33
41
}
34
42
@@ -258,4 +266,104 @@ describe('DynamicComponent', () => {
258
266
) ;
259
267
} ) ;
260
268
} ) ;
269
+
270
+ describe ( '@Input(ndcDynamicNgModuleRef)' , ( ) => {
271
+ const testToken = new InjectionToken < any > ( 'TEST_TOKEN' ) ;
272
+ const testTokenValue = { } ;
273
+ let ngModuleRef : NgModuleRef < any > ;
274
+ let parentInjector : Injector ;
275
+
276
+ @NgModule ( {
277
+ providers : [ { provide : testToken , useValue : testTokenValue } ] ,
278
+ } )
279
+ class CustomNgModule { }
280
+
281
+ it ( 'should use input if provided for ngModuleRef' , async ( ) => {
282
+ const fixture = await testSetup . redner ( ) ;
283
+
284
+ parentInjector = TestBed . inject ( NgModuleRef ) . injector ;
285
+ ngModuleRef = createNgModule ( CustomNgModule , parentInjector ) ;
286
+ fixture . setHostProps ( { ngModuleRef } ) ;
287
+
288
+ expect ( fixture . getInjectedInjector ( ) . get ( testToken ) ) . toBe ( testTokenValue ) ;
289
+ } ) ;
290
+
291
+ it ( 'should change component if input updated' , async ( ) => {
292
+ const fixture = await testSetup . redner ( ) ;
293
+
294
+ parentInjector = TestBed . inject ( NgModuleRef ) . injector ;
295
+ ngModuleRef = createNgModule ( CustomNgModule , parentInjector ) ;
296
+ fixture . setHostProps ( { ngModuleRef } ) ;
297
+
298
+ const injectedComp = fixture . getInjectedComponent ( ) ;
299
+
300
+ expect ( fixture . getInjectedInjector ( ) . get ( testToken ) ) . toBe ( testTokenValue ) ;
301
+
302
+ const testTokenValue2 = { } ;
303
+ @NgModule ( {
304
+ providers : [ { provide : testToken , useValue : testTokenValue2 } ] ,
305
+ } )
306
+ class CustomNgModule2 { }
307
+ ngModuleRef = createNgModule ( CustomNgModule2 , parentInjector ) ;
308
+
309
+ fixture . setHostProps ( { ngModuleRef } ) ;
310
+
311
+ expect ( fixture . getInjectedInjector ( ) . get ( testToken ) ) . toBe (
312
+ testTokenValue2 ,
313
+ ) ;
314
+ expect ( fixture . getInjectedComponent ( ) ) . not . toBe ( injectedComp ) ;
315
+ } ) ;
316
+ } ) ;
317
+
318
+ describe ( '@Input(ndcDynamicEnvironmentInjector)' , ( ) => {
319
+ const testToken = new InjectionToken < any > ( 'TEST_TOKEN' ) ;
320
+ const testTokenValue = { } ;
321
+ let ngModuleRef : NgModuleRef < any > ;
322
+ let environmentInjector : EnvironmentInjector ;
323
+ let parentInjector : Injector ;
324
+
325
+ @NgModule ( {
326
+ providers : [ { provide : testToken , useValue : testTokenValue } ] ,
327
+ } )
328
+ class CustomNgModule { }
329
+
330
+ it ( 'should use input if provided for environmentInjector' , async ( ) => {
331
+ const fixture = await testSetup . redner ( ) ;
332
+
333
+ parentInjector = TestBed . inject ( NgModuleRef ) . injector ;
334
+ ngModuleRef = createNgModule ( CustomNgModule , parentInjector ) ;
335
+ environmentInjector = ngModuleRef . injector ;
336
+ fixture . setHostProps ( { environmentInjector } ) ;
337
+
338
+ expect ( fixture . getInjectedInjector ( ) . get ( testToken ) ) . toBe ( testTokenValue ) ;
339
+ } ) ;
340
+
341
+ it ( 'should change component if input updated' , async ( ) => {
342
+ const fixture = await testSetup . redner ( ) ;
343
+
344
+ parentInjector = TestBed . inject ( NgModuleRef ) . injector ;
345
+ ngModuleRef = createNgModule ( CustomNgModule , parentInjector ) ;
346
+ environmentInjector = ngModuleRef . injector ;
347
+ fixture . setHostProps ( { environmentInjector } ) ;
348
+
349
+ const injectedComp = fixture . getInjectedComponent ( ) ;
350
+
351
+ expect ( fixture . getInjectedInjector ( ) . get ( testToken ) ) . toBe ( testTokenValue ) ;
352
+
353
+ const testTokenValue2 = { } ;
354
+ @NgModule ( {
355
+ providers : [ { provide : testToken , useValue : testTokenValue2 } ] ,
356
+ } )
357
+ class CustomNgModule2 { }
358
+ ngModuleRef = createNgModule ( CustomNgModule2 , parentInjector ) ;
359
+ environmentInjector = ngModuleRef . injector ;
360
+
361
+ fixture . setHostProps ( { environmentInjector } ) ;
362
+
363
+ expect ( fixture . getInjectedInjector ( ) . get ( testToken ) ) . toBe (
364
+ testTokenValue2 ,
365
+ ) ;
366
+ expect ( fixture . getInjectedComponent ( ) ) . not . toBe ( injectedComp ) ;
367
+ } ) ;
368
+ } ) ;
261
369
} ) ;
0 commit comments