2016-06-23 09:47:54 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								/ * *  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 *  @license 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 *  Copyright  Google  Inc .  All  Rights  Reserved . 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 * 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 *  Use  of  this  source  code  is  governed  by  an  MIT - style  license  that  can  be 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 *  found  in  the  LICENSE  file  at  https : //angular.io/license
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 * / 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-08-17 09:24:44 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								import  { CompilerConfig ,  ResourceLoader }  from  '@angular/compiler' ;  
						 
					
						
							
								
									
										
										
										
											2019-09-06 09:26:17 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								import  { CUSTOM_ELEMENTS_SCHEMA ,  Compiler ,  Component ,  ComponentFactoryResolver ,  Directive ,  Inject ,  Injectable ,  InjectionToken ,  Injector ,  Input ,  NgModule ,  Optional ,  Pipe ,  SkipSelf ,  ɵ stringify  as  stringify }  from  '@angular/core' ;  
						 
					
						
							
								
									
										
										
										
											2016-12-15 02:05:17 +03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								import  { TestBed ,  async ,  fakeAsync ,  getTestBed ,  inject ,  tick ,  withModule }  from  '@angular/core/testing' ;  
						 
					
						
							
								
									
										
										
										
											2017-03-02 12:12:46 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								import  { expect }  from  '@angular/platform-browser/testing/src/matchers' ;  
						 
					
						
							
								
									
										
										
										
											2019-02-07 14:29:28 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								import  { ivyEnabled ,  modifiedInIvy ,  obsoleteInIvy ,  onlyInIvy }  from  '@angular/private/testing' ;  
						 
					
						
							
								
									
										
											 
										
											
												feat(testing): add implicit test module
Every test now has an implicit module. It can be configured via `configureModule` (from @angular/core/testing)
to add providers, directives, pipes, ...
The compiler now has to be configured separately via `configureCompiler` (from @angular/core/testing)
to add providers or define whether to use jit.
BREAKING CHANGE:
- Application providers can no longer inject compiler internals (i.e. everything
  from `@angular/compiler). Inject `Compiler` instead. This reflects the
  changes to `bootstrap` for module support (3f55aa609f60f130f1d69188ed057214b1267cb3).
- Compiler providers can no longer be added via `addProviders` / `withProviders`.
  Use the new method `configureCompiler` instead.
- Platform directives / pipes need to be provided via
  `configureModule` and can no longer be provided via the
  `PLATFORM_PIPES` / `PLATFORM_DIRECTIVES` tokens.
- `setBaseTestProviders()` was renamed into `initTestEnvironment` and 
  now takes a `PlatformRef` and a factory for a
  `Compiler`.
- E.g. for the browser platform:
  
  BEFORE:
  ```
  import {setBaseTestProviders} from ‘@angular/core/testing’;
  import {TEST_BROWSER_DYNAMIC_PLATFORM_PROVIDERS,
      TEST_BROWSER_DYNAMIC_APPLICATION_PROVIDERS} from ‘@angular/platform-browser-dynamic/testing’;
  
  setBaseTestProviders(TEST_BROWSER_DYNAMIC_PLATFORM_PROVIDERS,
      TEST_BROWSER_DYNAMIC_APPLICATION_PROVIDERS);   
  ```
  AFTER:
  ```
  import {setBaseTestProviders} from ‘@angular/core/testing’;
  import {browserTestCompiler, browserDynamicTestPlatform,
      BrowserDynamicTestModule} from ‘@angular/platform-browser-dynamic/testing’;
  
  initTestEnvironment(
      browserTestCompiler,
      browserDynamicTestPlatform(),
      BrowserDynamicTestModule);
  ```
- E.g. for the server platform:
  
  BEFORE:
  ```
  import {setBaseTestProviders} from ‘@angular/core/testing’;
  import {TEST_SERVER_PLATFORM_PROVIDERS,
      TEST_SERVER_APPLICATION_PROVIDERS} from ‘@angular/platform-server/testing/server’;
  
  setBaseTestProviders(TEST_SERVER_PLATFORM_PROVIDERS,
      TEST_SERVER_APPLICATION_PROVIDERS);   
  ```
  AFTER:
  ```
  import {setBaseTestProviders} from ‘@angular/core/testing’;
  import {serverTestCompiler, serverTestPlatform,
      ServerTestModule} from ‘@angular/platform-browser-dynamic/testing’;
  
  initTestEnvironment(
      serverTestCompiler,
      serverTestPlatform(),
      ServerTestModule);
  ```
Related to #9726
Closes #9846
											 
										 
										
											2016-07-04 09:37:30 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2015-10-08 15:33:17 -07:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								// Services, and components for the tests.
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-08-10 11:51:40 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								@Component ( { selector :  'child-comp' ,  template :  ` <span>Original {{childBinding}}</span> ` } )  
						 
					
						
							
								
									
										
										
										
											2015-10-08 15:33:17 -07:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								@Injectable ( )  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								class  ChildComp  {  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  childBinding : string ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  constructor ( )  {  this . childBinding  =  'Child' ;  } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-03-08 13:36:48 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								@Component ( { selector :  'child-comp' ,  template :  ` <span>Mock</span> ` } )  
						 
					
						
							
								
									
										
										
										
											2015-10-08 15:33:17 -07:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								@Injectable ( )  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								class  MockChildComp  {  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-03-08 13:36:48 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								@Component ( {  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  selector :  'parent-comp' , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  template :  ` Parent(<child-comp></child-comp>) ` , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								} )  
						 
					
						
							
								
									
										
										
										
											2015-10-08 15:33:17 -07:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								@Injectable ( )  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								class  ParentComp  {  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-07-19 08:59:14 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								@Component ( { selector :  'my-if-comp' ,  template :  ` MyIf(<span *ngIf="showMore">More</span>) ` } )  
						 
					
						
							
								
									
										
										
										
											2015-10-08 15:33:17 -07:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								@Injectable ( )  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								class  MyIfComp  {  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  showMore : boolean  =  false ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-03-08 13:36:48 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								@Component ( { selector :  'child-child-comp' ,  template :  ` <span>ChildChild</span> ` } )  
						 
					
						
							
								
									
										
										
										
											2015-10-08 15:33:17 -07:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								@Injectable ( )  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								class  ChildChildComp  {  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-03-08 13:36:48 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								@Component ( {  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  selector :  'child-comp' , 
							 
						 
					
						
							
								
									
										
										
										
											2015-10-08 15:33:17 -07:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								  template :  ` <span>Original {{childBinding}}(<child-child-comp></child-child-comp>)</span> ` , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								} )  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								@Injectable ( )  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								class  ChildWithChildComp  {  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  childBinding : string ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  constructor ( )  {  this . childBinding  =  'Child' ;  } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								class  FancyService  {  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  value : string  =  'real value' ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  getAsyncValue() {  return  Promise . resolve ( 'async value' ) ;  } 
							 
						 
					
						
							
								
									
										
											 
										
											
												feat(tests): manage asynchronous tests using zones
Instead of using injectAsync and returning a promise, use the `async` function
to wrap tests. This will run the test inside a zone which does not complete
the test until all asynchronous tasks have been completed.
`async` may be used with the `inject` function, or separately.
BREAKING CHANGE:
`injectAsync` is now deprecated. Instead, use the `async` function
to wrap any asynchronous tests.
Before:
```
it('should wait for returned promises', injectAsync([FancyService], (service) => {
  return service.getAsyncValue().then((value) => { expect(value).toEqual('async value'); });
}));
it('should wait for returned promises', injectAsync([], () => {
  return somePromise.then(() => { expect(true).toEqual(true); });
}));
```
After:
```
it('should wait for returned promises', async(inject([FancyService], (service) => {
  service.getAsyncValue().then((value) => { expect(value).toEqual('async value'); });
})));
// Note that if there is no injection, we no longer need `inject` OR `injectAsync`.
it('should wait for returned promises', async(() => {
  somePromise.then() => { expect(true).toEqual(true); });
}));
```
Closes #7735
											 
										 
										
											2016-03-23 10:59:38 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								  getTimeoutValue() { 
							 
						 
					
						
							
								
									
										
										
										
											2016-10-30 20:39:53 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    return  new  Promise < string > ( ( resolve ,  reject )  = >  setTimeout ( ( )  = >  resolve ( 'timeout value' ) ,  10 ) ) ; 
							 
						 
					
						
							
								
									
										
											 
										
											
												feat(tests): manage asynchronous tests using zones
Instead of using injectAsync and returning a promise, use the `async` function
to wrap tests. This will run the test inside a zone which does not complete
the test until all asynchronous tasks have been completed.
`async` may be used with the `inject` function, or separately.
BREAKING CHANGE:
`injectAsync` is now deprecated. Instead, use the `async` function
to wrap any asynchronous tests.
Before:
```
it('should wait for returned promises', injectAsync([FancyService], (service) => {
  return service.getAsyncValue().then((value) => { expect(value).toEqual('async value'); });
}));
it('should wait for returned promises', injectAsync([], () => {
  return somePromise.then(() => { expect(true).toEqual(true); });
}));
```
After:
```
it('should wait for returned promises', async(inject([FancyService], (service) => {
  service.getAsyncValue().then((value) => { expect(value).toEqual('async value'); });
})));
// Note that if there is no injection, we no longer need `inject` OR `injectAsync`.
it('should wait for returned promises', async(() => {
  somePromise.then() => { expect(true).toEqual(true); });
}));
```
Closes #7735
											 
										 
										
											2016-03-23 10:59:38 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								  } 
							 
						 
					
						
							
								
									
										
										
										
											2015-10-08 15:33:17 -07:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								class  MockFancyService  extends  FancyService  {  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  value : string  =  'mocked out value' ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-03-08 13:36:48 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								@Component ( {  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  selector :  'my-service-comp' , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  providers :  [ FancyService ] , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  template :  ` injected value: {{fancyService.value}} ` 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								} )  
						 
					
						
							
								
									
										
										
										
											2015-10-08 15:33:17 -07:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								class  TestProvidersComp  {  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  constructor ( private  fancyService : FancyService )  { } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-03-08 13:36:48 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								@Component ( {  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  selector :  'my-service-comp' , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  viewProviders :  [ FancyService ] , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  template :  ` injected value: {{fancyService.value}} ` 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								} )  
						 
					
						
							
								
									
										
										
										
											2015-10-08 15:33:17 -07:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								class  TestViewProvidersComp  {  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  constructor ( private  fancyService : FancyService )  { } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
											 
										
											
												feat(testing): add implicit test module
Every test now has an implicit module. It can be configured via `configureModule` (from @angular/core/testing)
to add providers, directives, pipes, ...
The compiler now has to be configured separately via `configureCompiler` (from @angular/core/testing)
to add providers or define whether to use jit.
BREAKING CHANGE:
- Application providers can no longer inject compiler internals (i.e. everything
  from `@angular/compiler). Inject `Compiler` instead. This reflects the
  changes to `bootstrap` for module support (3f55aa609f60f130f1d69188ed057214b1267cb3).
- Compiler providers can no longer be added via `addProviders` / `withProviders`.
  Use the new method `configureCompiler` instead.
- Platform directives / pipes need to be provided via
  `configureModule` and can no longer be provided via the
  `PLATFORM_PIPES` / `PLATFORM_DIRECTIVES` tokens.
- `setBaseTestProviders()` was renamed into `initTestEnvironment` and 
  now takes a `PlatformRef` and a factory for a
  `Compiler`.
- E.g. for the browser platform:
  
  BEFORE:
  ```
  import {setBaseTestProviders} from ‘@angular/core/testing’;
  import {TEST_BROWSER_DYNAMIC_PLATFORM_PROVIDERS,
      TEST_BROWSER_DYNAMIC_APPLICATION_PROVIDERS} from ‘@angular/platform-browser-dynamic/testing’;
  
  setBaseTestProviders(TEST_BROWSER_DYNAMIC_PLATFORM_PROVIDERS,
      TEST_BROWSER_DYNAMIC_APPLICATION_PROVIDERS);   
  ```
  AFTER:
  ```
  import {setBaseTestProviders} from ‘@angular/core/testing’;
  import {browserTestCompiler, browserDynamicTestPlatform,
      BrowserDynamicTestModule} from ‘@angular/platform-browser-dynamic/testing’;
  
  initTestEnvironment(
      browserTestCompiler,
      browserDynamicTestPlatform(),
      BrowserDynamicTestModule);
  ```
- E.g. for the server platform:
  
  BEFORE:
  ```
  import {setBaseTestProviders} from ‘@angular/core/testing’;
  import {TEST_SERVER_PLATFORM_PROVIDERS,
      TEST_SERVER_APPLICATION_PROVIDERS} from ‘@angular/platform-server/testing/server’;
  
  setBaseTestProviders(TEST_SERVER_PLATFORM_PROVIDERS,
      TEST_SERVER_APPLICATION_PROVIDERS);   
  ```
  AFTER:
  ```
  import {setBaseTestProviders} from ‘@angular/core/testing’;
  import {serverTestCompiler, serverTestPlatform,
      ServerTestModule} from ‘@angular/platform-browser-dynamic/testing’;
  
  initTestEnvironment(
      serverTestCompiler,
      serverTestPlatform(),
      ServerTestModule);
  ```
Related to #9726
Closes #9846
											 
										 
										
											2016-07-04 09:37:30 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								@Directive ( { selector :  '[someDir]' ,  host :  { '[title]' :  'someDir' } } )  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								class  SomeDirective  {  
						 
					
						
							
								
									
										
										
										
											2018-06-18 16:38:33 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								  // TODO(issue/24571): remove '!'.
 
							 
						 
					
						
							
								
									
										
											 
										
											
												feat(testing): add implicit test module
Every test now has an implicit module. It can be configured via `configureModule` (from @angular/core/testing)
to add providers, directives, pipes, ...
The compiler now has to be configured separately via `configureCompiler` (from @angular/core/testing)
to add providers or define whether to use jit.
BREAKING CHANGE:
- Application providers can no longer inject compiler internals (i.e. everything
  from `@angular/compiler). Inject `Compiler` instead. This reflects the
  changes to `bootstrap` for module support (3f55aa609f60f130f1d69188ed057214b1267cb3).
- Compiler providers can no longer be added via `addProviders` / `withProviders`.
  Use the new method `configureCompiler` instead.
- Platform directives / pipes need to be provided via
  `configureModule` and can no longer be provided via the
  `PLATFORM_PIPES` / `PLATFORM_DIRECTIVES` tokens.
- `setBaseTestProviders()` was renamed into `initTestEnvironment` and 
  now takes a `PlatformRef` and a factory for a
  `Compiler`.
- E.g. for the browser platform:
  
  BEFORE:
  ```
  import {setBaseTestProviders} from ‘@angular/core/testing’;
  import {TEST_BROWSER_DYNAMIC_PLATFORM_PROVIDERS,
      TEST_BROWSER_DYNAMIC_APPLICATION_PROVIDERS} from ‘@angular/platform-browser-dynamic/testing’;
  
  setBaseTestProviders(TEST_BROWSER_DYNAMIC_PLATFORM_PROVIDERS,
      TEST_BROWSER_DYNAMIC_APPLICATION_PROVIDERS);   
  ```
  AFTER:
  ```
  import {setBaseTestProviders} from ‘@angular/core/testing’;
  import {browserTestCompiler, browserDynamicTestPlatform,
      BrowserDynamicTestModule} from ‘@angular/platform-browser-dynamic/testing’;
  
  initTestEnvironment(
      browserTestCompiler,
      browserDynamicTestPlatform(),
      BrowserDynamicTestModule);
  ```
- E.g. for the server platform:
  
  BEFORE:
  ```
  import {setBaseTestProviders} from ‘@angular/core/testing’;
  import {TEST_SERVER_PLATFORM_PROVIDERS,
      TEST_SERVER_APPLICATION_PROVIDERS} from ‘@angular/platform-server/testing/server’;
  
  setBaseTestProviders(TEST_SERVER_PLATFORM_PROVIDERS,
      TEST_SERVER_APPLICATION_PROVIDERS);   
  ```
  AFTER:
  ```
  import {setBaseTestProviders} from ‘@angular/core/testing’;
  import {serverTestCompiler, serverTestPlatform,
      ServerTestModule} from ‘@angular/platform-browser-dynamic/testing’;
  
  initTestEnvironment(
      serverTestCompiler,
      serverTestPlatform(),
      ServerTestModule);
  ```
Related to #9726
Closes #9846
											 
										 
										
											2016-07-04 09:37:30 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								  @Input ( ) 
							 
						 
					
						
							
								
									
										
										
										
											2018-06-18 16:38:33 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								  someDir  ! :  string ; 
							 
						 
					
						
							
								
									
										
											 
										
											
												feat(testing): add implicit test module
Every test now has an implicit module. It can be configured via `configureModule` (from @angular/core/testing)
to add providers, directives, pipes, ...
The compiler now has to be configured separately via `configureCompiler` (from @angular/core/testing)
to add providers or define whether to use jit.
BREAKING CHANGE:
- Application providers can no longer inject compiler internals (i.e. everything
  from `@angular/compiler). Inject `Compiler` instead. This reflects the
  changes to `bootstrap` for module support (3f55aa609f60f130f1d69188ed057214b1267cb3).
- Compiler providers can no longer be added via `addProviders` / `withProviders`.
  Use the new method `configureCompiler` instead.
- Platform directives / pipes need to be provided via
  `configureModule` and can no longer be provided via the
  `PLATFORM_PIPES` / `PLATFORM_DIRECTIVES` tokens.
- `setBaseTestProviders()` was renamed into `initTestEnvironment` and 
  now takes a `PlatformRef` and a factory for a
  `Compiler`.
- E.g. for the browser platform:
  
  BEFORE:
  ```
  import {setBaseTestProviders} from ‘@angular/core/testing’;
  import {TEST_BROWSER_DYNAMIC_PLATFORM_PROVIDERS,
      TEST_BROWSER_DYNAMIC_APPLICATION_PROVIDERS} from ‘@angular/platform-browser-dynamic/testing’;
  
  setBaseTestProviders(TEST_BROWSER_DYNAMIC_PLATFORM_PROVIDERS,
      TEST_BROWSER_DYNAMIC_APPLICATION_PROVIDERS);   
  ```
  AFTER:
  ```
  import {setBaseTestProviders} from ‘@angular/core/testing’;
  import {browserTestCompiler, browserDynamicTestPlatform,
      BrowserDynamicTestModule} from ‘@angular/platform-browser-dynamic/testing’;
  
  initTestEnvironment(
      browserTestCompiler,
      browserDynamicTestPlatform(),
      BrowserDynamicTestModule);
  ```
- E.g. for the server platform:
  
  BEFORE:
  ```
  import {setBaseTestProviders} from ‘@angular/core/testing’;
  import {TEST_SERVER_PLATFORM_PROVIDERS,
      TEST_SERVER_APPLICATION_PROVIDERS} from ‘@angular/platform-server/testing/server’;
  
  setBaseTestProviders(TEST_SERVER_PLATFORM_PROVIDERS,
      TEST_SERVER_APPLICATION_PROVIDERS);   
  ```
  AFTER:
  ```
  import {setBaseTestProviders} from ‘@angular/core/testing’;
  import {serverTestCompiler, serverTestPlatform,
      ServerTestModule} from ‘@angular/platform-browser-dynamic/testing’;
  
  initTestEnvironment(
      serverTestCompiler,
      serverTestPlatform(),
      ServerTestModule);
  ```
Related to #9726
Closes #9846
											 
										 
										
											2016-07-04 09:37:30 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								@Pipe ( { name :  'somePipe' } )  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								class  SomePipe  {  
						 
					
						
							
								
									
										
										
										
											2016-10-30 20:39:53 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								  transform ( value : string )  {  return  ` transformed  ${ value } ` ;  } 
							 
						 
					
						
							
								
									
										
											 
										
											
												feat(testing): add implicit test module
Every test now has an implicit module. It can be configured via `configureModule` (from @angular/core/testing)
to add providers, directives, pipes, ...
The compiler now has to be configured separately via `configureCompiler` (from @angular/core/testing)
to add providers or define whether to use jit.
BREAKING CHANGE:
- Application providers can no longer inject compiler internals (i.e. everything
  from `@angular/compiler). Inject `Compiler` instead. This reflects the
  changes to `bootstrap` for module support (3f55aa609f60f130f1d69188ed057214b1267cb3).
- Compiler providers can no longer be added via `addProviders` / `withProviders`.
  Use the new method `configureCompiler` instead.
- Platform directives / pipes need to be provided via
  `configureModule` and can no longer be provided via the
  `PLATFORM_PIPES` / `PLATFORM_DIRECTIVES` tokens.
- `setBaseTestProviders()` was renamed into `initTestEnvironment` and 
  now takes a `PlatformRef` and a factory for a
  `Compiler`.
- E.g. for the browser platform:
  
  BEFORE:
  ```
  import {setBaseTestProviders} from ‘@angular/core/testing’;
  import {TEST_BROWSER_DYNAMIC_PLATFORM_PROVIDERS,
      TEST_BROWSER_DYNAMIC_APPLICATION_PROVIDERS} from ‘@angular/platform-browser-dynamic/testing’;
  
  setBaseTestProviders(TEST_BROWSER_DYNAMIC_PLATFORM_PROVIDERS,
      TEST_BROWSER_DYNAMIC_APPLICATION_PROVIDERS);   
  ```
  AFTER:
  ```
  import {setBaseTestProviders} from ‘@angular/core/testing’;
  import {browserTestCompiler, browserDynamicTestPlatform,
      BrowserDynamicTestModule} from ‘@angular/platform-browser-dynamic/testing’;
  
  initTestEnvironment(
      browserTestCompiler,
      browserDynamicTestPlatform(),
      BrowserDynamicTestModule);
  ```
- E.g. for the server platform:
  
  BEFORE:
  ```
  import {setBaseTestProviders} from ‘@angular/core/testing’;
  import {TEST_SERVER_PLATFORM_PROVIDERS,
      TEST_SERVER_APPLICATION_PROVIDERS} from ‘@angular/platform-server/testing/server’;
  
  setBaseTestProviders(TEST_SERVER_PLATFORM_PROVIDERS,
      TEST_SERVER_APPLICATION_PROVIDERS);   
  ```
  AFTER:
  ```
  import {setBaseTestProviders} from ‘@angular/core/testing’;
  import {serverTestCompiler, serverTestPlatform,
      ServerTestModule} from ‘@angular/platform-browser-dynamic/testing’;
  
  initTestEnvironment(
      serverTestCompiler,
      serverTestPlatform(),
      ServerTestModule);
  ```
Related to #9726
Closes #9846
											 
										 
										
											2016-07-04 09:37:30 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								@Component ( { selector :  'comp' ,  template :  ` <div  [someDir]="'someValue' | somePipe"></div> ` } )  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								class  CompUsingModuleDirectiveAndPipe  {  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-07-18 03:50:31 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								@NgModule ( )  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								class  SomeLibModule  {  
						 
					
						
							
								
									
										
											 
										
											
												feat(testing): add implicit test module
Every test now has an implicit module. It can be configured via `configureModule` (from @angular/core/testing)
to add providers, directives, pipes, ...
The compiler now has to be configured separately via `configureCompiler` (from @angular/core/testing)
to add providers or define whether to use jit.
BREAKING CHANGE:
- Application providers can no longer inject compiler internals (i.e. everything
  from `@angular/compiler). Inject `Compiler` instead. This reflects the
  changes to `bootstrap` for module support (3f55aa609f60f130f1d69188ed057214b1267cb3).
- Compiler providers can no longer be added via `addProviders` / `withProviders`.
  Use the new method `configureCompiler` instead.
- Platform directives / pipes need to be provided via
  `configureModule` and can no longer be provided via the
  `PLATFORM_PIPES` / `PLATFORM_DIRECTIVES` tokens.
- `setBaseTestProviders()` was renamed into `initTestEnvironment` and 
  now takes a `PlatformRef` and a factory for a
  `Compiler`.
- E.g. for the browser platform:
  
  BEFORE:
  ```
  import {setBaseTestProviders} from ‘@angular/core/testing’;
  import {TEST_BROWSER_DYNAMIC_PLATFORM_PROVIDERS,
      TEST_BROWSER_DYNAMIC_APPLICATION_PROVIDERS} from ‘@angular/platform-browser-dynamic/testing’;
  
  setBaseTestProviders(TEST_BROWSER_DYNAMIC_PLATFORM_PROVIDERS,
      TEST_BROWSER_DYNAMIC_APPLICATION_PROVIDERS);   
  ```
  AFTER:
  ```
  import {setBaseTestProviders} from ‘@angular/core/testing’;
  import {browserTestCompiler, browserDynamicTestPlatform,
      BrowserDynamicTestModule} from ‘@angular/platform-browser-dynamic/testing’;
  
  initTestEnvironment(
      browserTestCompiler,
      browserDynamicTestPlatform(),
      BrowserDynamicTestModule);
  ```
- E.g. for the server platform:
  
  BEFORE:
  ```
  import {setBaseTestProviders} from ‘@angular/core/testing’;
  import {TEST_SERVER_PLATFORM_PROVIDERS,
      TEST_SERVER_APPLICATION_PROVIDERS} from ‘@angular/platform-server/testing/server’;
  
  setBaseTestProviders(TEST_SERVER_PLATFORM_PROVIDERS,
      TEST_SERVER_APPLICATION_PROVIDERS);   
  ```
  AFTER:
  ```
  import {setBaseTestProviders} from ‘@angular/core/testing’;
  import {serverTestCompiler, serverTestPlatform,
      ServerTestModule} from ‘@angular/platform-browser-dynamic/testing’;
  
  initTestEnvironment(
      serverTestCompiler,
      serverTestPlatform(),
      ServerTestModule);
  ```
Related to #9726
Closes #9846
											 
										 
										
											2016-07-04 09:37:30 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2018-06-04 15:11:40 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								@Component ( {  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  selector :  'comp' , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  templateUrl :  '/base/angular/packages/platform-browser/test/static_assets/test.html' 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								} )  
						 
					
						
							
								
									
										
											 
										
											
												feat(testing): add implicit test module
Every test now has an implicit module. It can be configured via `configureModule` (from @angular/core/testing)
to add providers, directives, pipes, ...
The compiler now has to be configured separately via `configureCompiler` (from @angular/core/testing)
to add providers or define whether to use jit.
BREAKING CHANGE:
- Application providers can no longer inject compiler internals (i.e. everything
  from `@angular/compiler). Inject `Compiler` instead. This reflects the
  changes to `bootstrap` for module support (3f55aa609f60f130f1d69188ed057214b1267cb3).
- Compiler providers can no longer be added via `addProviders` / `withProviders`.
  Use the new method `configureCompiler` instead.
- Platform directives / pipes need to be provided via
  `configureModule` and can no longer be provided via the
  `PLATFORM_PIPES` / `PLATFORM_DIRECTIVES` tokens.
- `setBaseTestProviders()` was renamed into `initTestEnvironment` and 
  now takes a `PlatformRef` and a factory for a
  `Compiler`.
- E.g. for the browser platform:
  
  BEFORE:
  ```
  import {setBaseTestProviders} from ‘@angular/core/testing’;
  import {TEST_BROWSER_DYNAMIC_PLATFORM_PROVIDERS,
      TEST_BROWSER_DYNAMIC_APPLICATION_PROVIDERS} from ‘@angular/platform-browser-dynamic/testing’;
  
  setBaseTestProviders(TEST_BROWSER_DYNAMIC_PLATFORM_PROVIDERS,
      TEST_BROWSER_DYNAMIC_APPLICATION_PROVIDERS);   
  ```
  AFTER:
  ```
  import {setBaseTestProviders} from ‘@angular/core/testing’;
  import {browserTestCompiler, browserDynamicTestPlatform,
      BrowserDynamicTestModule} from ‘@angular/platform-browser-dynamic/testing’;
  
  initTestEnvironment(
      browserTestCompiler,
      browserDynamicTestPlatform(),
      BrowserDynamicTestModule);
  ```
- E.g. for the server platform:
  
  BEFORE:
  ```
  import {setBaseTestProviders} from ‘@angular/core/testing’;
  import {TEST_SERVER_PLATFORM_PROVIDERS,
      TEST_SERVER_APPLICATION_PROVIDERS} from ‘@angular/platform-server/testing/server’;
  
  setBaseTestProviders(TEST_SERVER_PLATFORM_PROVIDERS,
      TEST_SERVER_APPLICATION_PROVIDERS);   
  ```
  AFTER:
  ```
  import {setBaseTestProviders} from ‘@angular/core/testing’;
  import {serverTestCompiler, serverTestPlatform,
      ServerTestModule} from ‘@angular/platform-browser-dynamic/testing’;
  
  initTestEnvironment(
      serverTestCompiler,
      serverTestPlatform(),
      ServerTestModule);
  ```
Related to #9726
Closes #9846
											 
										 
										
											2016-07-04 09:37:30 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								class  CompWithUrlTemplate  {  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2019-08-28 16:22:36 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								const  aTok  =  new  InjectionToken < string > ( 'a' ) ;  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								const  bTok  =  new  InjectionToken < string > ( 'b' ) ;  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2017-12-16 14:42:55 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								{  
						 
					
						
							
								
									
										
										
										
											2016-08-10 11:51:40 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								  describe ( 'public testing API' ,  ( )  = >  { 
							 
						 
					
						
							
								
									
										
										
										
											2016-12-31 11:50:03 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    describe ( 'using the async helper with context passing' ,  ( )  = >  { 
							 
						 
					
						
							
								
									
										
										
										
											2019-06-14 12:19:09 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								      type  TestContext  =  { actuallyDone : boolean } ; 
							 
						 
					
						
							
								
									
										
										
										
											2015-11-17 12:37:39 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2019-06-14 12:19:09 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								      beforeEach ( function ( this :  TestContext )  {  this . actuallyDone  =  false ;  } ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2015-11-17 12:37:39 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2019-06-14 12:19:09 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								      afterEach ( function ( this :  TestContext )  {  expect ( this . actuallyDone ) . toEqual ( true ) ;  } ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2015-10-08 15:33:17 -07:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2019-06-14 12:19:09 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								      it ( 'should run normal tests' ,  function ( this :  TestContext )  {  this . actuallyDone  =  true ;  } ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      it ( 'should run normal async tests' ,  function ( this :  TestContext ,  done )  { 
							 
						 
					
						
							
								
									
										
										
										
											2016-08-10 11:51:40 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        setTimeout ( ( )  = >  { 
							 
						 
					
						
							
								
									
										
										
										
											2016-12-31 11:50:03 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								          this . actuallyDone  =  true ; 
							 
						 
					
						
							
								
									
										
										
										
											2016-08-10 11:51:40 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								          done ( ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        } ,  0 ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      } ) ; 
							 
						 
					
						
							
								
									
										
											 
										
											
												feat(tests): manage asynchronous tests using zones
Instead of using injectAsync and returning a promise, use the `async` function
to wrap tests. This will run the test inside a zone which does not complete
the test until all asynchronous tasks have been completed.
`async` may be used with the `inject` function, or separately.
BREAKING CHANGE:
`injectAsync` is now deprecated. Instead, use the `async` function
to wrap any asynchronous tests.
Before:
```
it('should wait for returned promises', injectAsync([FancyService], (service) => {
  return service.getAsyncValue().then((value) => { expect(value).toEqual('async value'); });
}));
it('should wait for returned promises', injectAsync([], () => {
  return somePromise.then(() => { expect(true).toEqual(true); });
}));
```
After:
```
it('should wait for returned promises', async(inject([FancyService], (service) => {
  service.getAsyncValue().then((value) => { expect(value).toEqual('async value'); });
})));
// Note that if there is no injection, we no longer need `inject` OR `injectAsync`.
it('should wait for returned promises', async(() => {
  somePromise.then() => { expect(true).toEqual(true); });
}));
```
Closes #7735
											 
										 
										
											2016-03-23 10:59:38 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-08-10 11:51:40 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								      it ( 'should run async tests with tasks' , 
							 
						 
					
						
							
								
									
										
										
										
											2019-06-14 12:19:09 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								         async ( function ( this :  TestContext )  {  setTimeout ( ( )  = >  this . actuallyDone  =  true ,  0 ) ;  } ) ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2015-10-08 15:33:17 -07:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2019-06-14 12:19:09 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								      it ( 'should run async tests with promises' ,  async ( function ( this :  TestContext )  { 
							 
						 
					
						
							
								
									
										
										
										
											2016-10-30 20:39:53 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								           const  p  =  new  Promise ( ( resolve ,  reject )  = >  setTimeout ( resolve ,  10 ) ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2016-12-31 11:50:03 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								           p . then ( ( )  = >  this . actuallyDone  =  true ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								         } ) ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    describe ( 'basic context passing to inject, fakeAsync and withModule helpers' ,  ( )  = >  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      const  moduleConfig  =  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        providers :  [ FancyService ] , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      } ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2019-06-14 12:19:09 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								      type  TestContext  =  { contextModified : boolean } ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      beforeEach ( function ( this :  TestContext )  {  this . contextModified  =  false ;  } ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2016-12-31 11:50:03 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2019-06-14 12:19:09 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								      afterEach ( function ( this :  TestContext )  {  expect ( this . contextModified ) . toEqual ( true ) ;  } ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2016-12-31 11:50:03 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      it ( 'should pass context to inject helper' , 
							 
						 
					
						
							
								
									
										
										
										
											2019-06-14 12:19:09 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								         inject ( [ ] ,  function ( this :  TestContext )  {  this . contextModified  =  true ;  } ) ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2016-12-31 11:50:03 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      it ( 'should pass context to fakeAsync helper' , 
							 
						 
					
						
							
								
									
										
										
										
											2019-06-14 12:19:09 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								         fakeAsync ( function ( this :  TestContext )  {  this . contextModified  =  true ;  } ) ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2016-12-31 11:50:03 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      it ( 'should pass context to withModule helper - simple' , 
							 
						 
					
						
							
								
									
										
										
										
											2019-06-14 12:19:09 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								         withModule ( moduleConfig ,  function ( this :  TestContext )  {  this . contextModified  =  true ;  } ) ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2016-12-31 11:50:03 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      it ( 'should pass context to withModule helper - advanced' , 
							 
						 
					
						
							
								
									
										
										
										
											2019-06-14 12:19:09 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								         withModule ( moduleConfig ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								             . inject ( [ FancyService ] ,  function ( this :  TestContext ,  service : FancyService )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								               expect ( service . value ) . toBe ( 'real value' ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								               this . contextModified  =  true ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								             } ) ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2016-12-31 11:50:03 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      it ( 'should preserve context when async and inject helpers are combined' , 
							 
						 
					
						
							
								
									
										
										
										
											2019-06-14 12:19:09 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								         async ( inject ( [ ] ,  function ( this :  TestContext )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								           setTimeout ( ( )  = >  this . contextModified  =  true ,  0 ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								         } ) ) ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2016-12-31 11:50:03 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      it ( 'should preserve context when fakeAsync and inject helpers are combined' , 
							 
						 
					
						
							
								
									
										
										
										
											2019-06-14 12:19:09 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								         fakeAsync ( inject ( [ ] ,  function ( this :  TestContext )  { 
							 
						 
					
						
							
								
									
										
										
										
											2016-12-31 11:50:03 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								           setTimeout ( ( )  = >  this . contextModified  =  true ,  0 ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								           tick ( 1 ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								         } ) ) ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2016-08-10 11:51:40 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    } ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2015-10-08 15:33:17 -07:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-08-10 11:51:40 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    describe ( 'using the test injector with the inject helper' ,  ( )  = >  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      describe ( 'setting up Providers' ,  ( )  = >  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        beforeEach ( ( )  = >  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								          TestBed . configureTestingModule ( 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								              { providers :  [ { provide : FancyService ,  useValue : new  FancyService ( ) } ] } ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2016-04-26 13:06:50 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-10-30 20:39:53 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								          it ( 'should use set up providers' ,  inject ( [ FancyService ] ,  ( service : FancyService )  = >  { 
							 
						 
					
						
							
								
									
										
										
										
											2016-08-10 11:51:40 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								               expect ( service . value ) . toEqual ( 'real value' ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								             } ) ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2015-10-08 15:33:17 -07:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-08-10 11:51:40 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								          it ( 'should wait until returned promises' , 
							 
						 
					
						
							
								
									
										
										
										
											2016-10-30 20:39:53 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								             async ( inject ( [ FancyService ] ,  ( service : FancyService )  = >  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								               service . getAsyncValue ( ) . then ( ( value )  = >  expect ( value ) . toEqual ( 'async value' ) ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								               service . getTimeoutValue ( ) . then ( ( value )  = >  expect ( value ) . toEqual ( 'timeout value' ) ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2016-08-10 11:51:40 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								             } ) ) ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								          it ( 'should allow the use of fakeAsync' , 
							 
						 
					
						
							
								
									
										
										
										
											2016-10-30 20:39:53 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								             fakeAsync ( inject ( [ FancyService ] ,  ( service : FancyService )  = >  { 
							 
						 
					
						
							
								
									
										
										
										
											2017-03-24 09:59:41 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								               let  value : string  =  undefined  ! ; 
							 
						 
					
						
							
								
									
										
										
										
											2016-10-30 20:39:53 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								               service . getAsyncValue ( ) . then ( ( val )  = >  value  =  val ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2016-08-10 11:51:40 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								               tick ( ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								               expect ( value ) . toEqual ( 'async value' ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								             } ) ) ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-10-30 20:39:53 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								          it ( 'should allow use of "done"' ,  ( done )  = >  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            inject ( [ FancyService ] ,  ( service : FancyService )  = >  { 
							 
						 
					
						
							
								
									
										
										
										
											2016-08-10 11:51:40 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								              let  count  =  0 ; 
							 
						 
					
						
							
								
									
										
										
										
											2016-11-12 14:08:58 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								              const  id  =  setInterval ( ( )  = >  { 
							 
						 
					
						
							
								
									
										
										
										
											2016-08-10 11:51:40 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                count ++ ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                if  ( count  >  2 )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                  clearInterval ( id ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                  done ( ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								              } ,  5 ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            } ) ( ) ;   // inject needs to be invoked explicitly with ().
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								          } ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2015-10-08 15:33:17 -07:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-08-10 11:51:40 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								          describe ( 'using beforeEach' ,  ( )  = >  { 
							 
						 
					
						
							
								
									
										
										
										
											2016-10-30 20:39:53 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            beforeEach ( inject ( [ FancyService ] ,  ( service : FancyService )  = >  { 
							 
						 
					
						
							
								
									
										
										
										
											2016-08-10 11:51:40 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								              service . value  =  'value modified in beforeEach' ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            } ) ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2015-10-08 15:33:17 -07:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-10-30 20:39:53 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            it ( 'should use modified providers' ,  inject ( [ FancyService ] ,  ( service : FancyService )  = >  { 
							 
						 
					
						
							
								
									
										
										
										
											2016-08-10 11:51:40 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                 expect ( service . value ) . toEqual ( 'value modified in beforeEach' ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								               } ) ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								          } ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2015-12-10 12:00:48 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-08-10 11:51:40 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								          describe ( 'using async beforeEach' ,  ( )  = >  { 
							 
						 
					
						
							
								
									
										
										
										
											2016-10-30 20:39:53 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            beforeEach ( async ( inject ( [ FancyService ] ,  ( service : FancyService )  = >  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								              service . getAsyncValue ( ) . then ( ( value )  = >  service . value  =  value ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2016-08-10 11:51:40 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            } ) ) ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2016-04-26 13:06:50 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-08-10 11:51:40 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            it ( 'should use asynchronously modified value' , 
							 
						 
					
						
							
								
									
										
										
										
											2016-10-30 20:39:53 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								               inject ( [ FancyService ] ,  ( service : FancyService )  = >  { 
							 
						 
					
						
							
								
									
										
										
										
											2016-08-10 11:51:40 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                 expect ( service . value ) . toEqual ( 'async value' ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								               } ) ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								          } ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        } ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2016-04-26 13:06:50 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								      } ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2015-12-10 12:00:48 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    } ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2015-10-08 15:33:17 -07:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-08-10 11:51:40 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    describe ( 'using the test injector with modules' ,  ( )  = >  { 
							 
						 
					
						
							
								
									
										
										
										
											2016-11-12 14:08:58 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								      const  moduleConfig  =  { 
							 
						 
					
						
							
								
									
										
										
										
											2016-08-10 11:51:40 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        providers :  [ FancyService ] , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        imports :  [ SomeLibModule ] , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        declarations :  [ SomeDirective ,  SomePipe ,  CompUsingModuleDirectiveAndPipe ] , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      } ; 
							 
						 
					
						
							
								
									
										
											 
										
											
												feat(testing): add implicit test module
Every test now has an implicit module. It can be configured via `configureModule` (from @angular/core/testing)
to add providers, directives, pipes, ...
The compiler now has to be configured separately via `configureCompiler` (from @angular/core/testing)
to add providers or define whether to use jit.
BREAKING CHANGE:
- Application providers can no longer inject compiler internals (i.e. everything
  from `@angular/compiler). Inject `Compiler` instead. This reflects the
  changes to `bootstrap` for module support (3f55aa609f60f130f1d69188ed057214b1267cb3).
- Compiler providers can no longer be added via `addProviders` / `withProviders`.
  Use the new method `configureCompiler` instead.
- Platform directives / pipes need to be provided via
  `configureModule` and can no longer be provided via the
  `PLATFORM_PIPES` / `PLATFORM_DIRECTIVES` tokens.
- `setBaseTestProviders()` was renamed into `initTestEnvironment` and 
  now takes a `PlatformRef` and a factory for a
  `Compiler`.
- E.g. for the browser platform:
  
  BEFORE:
  ```
  import {setBaseTestProviders} from ‘@angular/core/testing’;
  import {TEST_BROWSER_DYNAMIC_PLATFORM_PROVIDERS,
      TEST_BROWSER_DYNAMIC_APPLICATION_PROVIDERS} from ‘@angular/platform-browser-dynamic/testing’;
  
  setBaseTestProviders(TEST_BROWSER_DYNAMIC_PLATFORM_PROVIDERS,
      TEST_BROWSER_DYNAMIC_APPLICATION_PROVIDERS);   
  ```
  AFTER:
  ```
  import {setBaseTestProviders} from ‘@angular/core/testing’;
  import {browserTestCompiler, browserDynamicTestPlatform,
      BrowserDynamicTestModule} from ‘@angular/platform-browser-dynamic/testing’;
  
  initTestEnvironment(
      browserTestCompiler,
      browserDynamicTestPlatform(),
      BrowserDynamicTestModule);
  ```
- E.g. for the server platform:
  
  BEFORE:
  ```
  import {setBaseTestProviders} from ‘@angular/core/testing’;
  import {TEST_SERVER_PLATFORM_PROVIDERS,
      TEST_SERVER_APPLICATION_PROVIDERS} from ‘@angular/platform-server/testing/server’;
  
  setBaseTestProviders(TEST_SERVER_PLATFORM_PROVIDERS,
      TEST_SERVER_APPLICATION_PROVIDERS);   
  ```
  AFTER:
  ```
  import {setBaseTestProviders} from ‘@angular/core/testing’;
  import {serverTestCompiler, serverTestPlatform,
      ServerTestModule} from ‘@angular/platform-browser-dynamic/testing’;
  
  initTestEnvironment(
      serverTestCompiler,
      serverTestPlatform(),
      ServerTestModule);
  ```
Related to #9726
Closes #9846
											 
										 
										
											2016-07-04 09:37:30 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-08-10 11:51:40 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								      describe ( 'setting up a module' ,  ( )  = >  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        beforeEach ( ( )  = >  TestBed . configureTestingModule ( moduleConfig ) ) ; 
							 
						 
					
						
							
								
									
										
											 
										
											
												feat(testing): add implicit test module
Every test now has an implicit module. It can be configured via `configureModule` (from @angular/core/testing)
to add providers, directives, pipes, ...
The compiler now has to be configured separately via `configureCompiler` (from @angular/core/testing)
to add providers or define whether to use jit.
BREAKING CHANGE:
- Application providers can no longer inject compiler internals (i.e. everything
  from `@angular/compiler). Inject `Compiler` instead. This reflects the
  changes to `bootstrap` for module support (3f55aa609f60f130f1d69188ed057214b1267cb3).
- Compiler providers can no longer be added via `addProviders` / `withProviders`.
  Use the new method `configureCompiler` instead.
- Platform directives / pipes need to be provided via
  `configureModule` and can no longer be provided via the
  `PLATFORM_PIPES` / `PLATFORM_DIRECTIVES` tokens.
- `setBaseTestProviders()` was renamed into `initTestEnvironment` and 
  now takes a `PlatformRef` and a factory for a
  `Compiler`.
- E.g. for the browser platform:
  
  BEFORE:
  ```
  import {setBaseTestProviders} from ‘@angular/core/testing’;
  import {TEST_BROWSER_DYNAMIC_PLATFORM_PROVIDERS,
      TEST_BROWSER_DYNAMIC_APPLICATION_PROVIDERS} from ‘@angular/platform-browser-dynamic/testing’;
  
  setBaseTestProviders(TEST_BROWSER_DYNAMIC_PLATFORM_PROVIDERS,
      TEST_BROWSER_DYNAMIC_APPLICATION_PROVIDERS);   
  ```
  AFTER:
  ```
  import {setBaseTestProviders} from ‘@angular/core/testing’;
  import {browserTestCompiler, browserDynamicTestPlatform,
      BrowserDynamicTestModule} from ‘@angular/platform-browser-dynamic/testing’;
  
  initTestEnvironment(
      browserTestCompiler,
      browserDynamicTestPlatform(),
      BrowserDynamicTestModule);
  ```
- E.g. for the server platform:
  
  BEFORE:
  ```
  import {setBaseTestProviders} from ‘@angular/core/testing’;
  import {TEST_SERVER_PLATFORM_PROVIDERS,
      TEST_SERVER_APPLICATION_PROVIDERS} from ‘@angular/platform-server/testing/server’;
  
  setBaseTestProviders(TEST_SERVER_PLATFORM_PROVIDERS,
      TEST_SERVER_APPLICATION_PROVIDERS);   
  ```
  AFTER:
  ```
  import {setBaseTestProviders} from ‘@angular/core/testing’;
  import {serverTestCompiler, serverTestPlatform,
      ServerTestModule} from ‘@angular/platform-browser-dynamic/testing’;
  
  initTestEnvironment(
      serverTestCompiler,
      serverTestPlatform(),
      ServerTestModule);
  ```
Related to #9726
Closes #9846
											 
										 
										
											2016-07-04 09:37:30 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-08-10 11:51:40 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        it ( 'should use set up providers' ,  inject ( [ FancyService ] ,  ( service : FancyService )  = >  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								             expect ( service . value ) . toEqual ( 'real value' ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								           } ) ) ; 
							 
						 
					
						
							
								
									
										
											 
										
											
												feat(testing): add implicit test module
Every test now has an implicit module. It can be configured via `configureModule` (from @angular/core/testing)
to add providers, directives, pipes, ...
The compiler now has to be configured separately via `configureCompiler` (from @angular/core/testing)
to add providers or define whether to use jit.
BREAKING CHANGE:
- Application providers can no longer inject compiler internals (i.e. everything
  from `@angular/compiler). Inject `Compiler` instead. This reflects the
  changes to `bootstrap` for module support (3f55aa609f60f130f1d69188ed057214b1267cb3).
- Compiler providers can no longer be added via `addProviders` / `withProviders`.
  Use the new method `configureCompiler` instead.
- Platform directives / pipes need to be provided via
  `configureModule` and can no longer be provided via the
  `PLATFORM_PIPES` / `PLATFORM_DIRECTIVES` tokens.
- `setBaseTestProviders()` was renamed into `initTestEnvironment` and 
  now takes a `PlatformRef` and a factory for a
  `Compiler`.
- E.g. for the browser platform:
  
  BEFORE:
  ```
  import {setBaseTestProviders} from ‘@angular/core/testing’;
  import {TEST_BROWSER_DYNAMIC_PLATFORM_PROVIDERS,
      TEST_BROWSER_DYNAMIC_APPLICATION_PROVIDERS} from ‘@angular/platform-browser-dynamic/testing’;
  
  setBaseTestProviders(TEST_BROWSER_DYNAMIC_PLATFORM_PROVIDERS,
      TEST_BROWSER_DYNAMIC_APPLICATION_PROVIDERS);   
  ```
  AFTER:
  ```
  import {setBaseTestProviders} from ‘@angular/core/testing’;
  import {browserTestCompiler, browserDynamicTestPlatform,
      BrowserDynamicTestModule} from ‘@angular/platform-browser-dynamic/testing’;
  
  initTestEnvironment(
      browserTestCompiler,
      browserDynamicTestPlatform(),
      BrowserDynamicTestModule);
  ```
- E.g. for the server platform:
  
  BEFORE:
  ```
  import {setBaseTestProviders} from ‘@angular/core/testing’;
  import {TEST_SERVER_PLATFORM_PROVIDERS,
      TEST_SERVER_APPLICATION_PROVIDERS} from ‘@angular/platform-server/testing/server’;
  
  setBaseTestProviders(TEST_SERVER_PLATFORM_PROVIDERS,
      TEST_SERVER_APPLICATION_PROVIDERS);   
  ```
  AFTER:
  ```
  import {setBaseTestProviders} from ‘@angular/core/testing’;
  import {serverTestCompiler, serverTestPlatform,
      ServerTestModule} from ‘@angular/platform-browser-dynamic/testing’;
  
  initTestEnvironment(
      serverTestCompiler,
      serverTestPlatform(),
      ServerTestModule);
  ```
Related to #9726
Closes #9846
											 
										 
										
											2016-07-04 09:37:30 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-08-10 11:51:40 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        it ( 'should be able to create any declared components' ,  ( )  = >  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								          const  compFixture  =  TestBed . createComponent ( CompUsingModuleDirectiveAndPipe ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								          expect ( compFixture . componentInstance ) . toBeAnInstanceOf ( CompUsingModuleDirectiveAndPipe ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        } ) ; 
							 
						 
					
						
							
								
									
										
											 
										
											
												feat(testing): add implicit test module
Every test now has an implicit module. It can be configured via `configureModule` (from @angular/core/testing)
to add providers, directives, pipes, ...
The compiler now has to be configured separately via `configureCompiler` (from @angular/core/testing)
to add providers or define whether to use jit.
BREAKING CHANGE:
- Application providers can no longer inject compiler internals (i.e. everything
  from `@angular/compiler). Inject `Compiler` instead. This reflects the
  changes to `bootstrap` for module support (3f55aa609f60f130f1d69188ed057214b1267cb3).
- Compiler providers can no longer be added via `addProviders` / `withProviders`.
  Use the new method `configureCompiler` instead.
- Platform directives / pipes need to be provided via
  `configureModule` and can no longer be provided via the
  `PLATFORM_PIPES` / `PLATFORM_DIRECTIVES` tokens.
- `setBaseTestProviders()` was renamed into `initTestEnvironment` and 
  now takes a `PlatformRef` and a factory for a
  `Compiler`.
- E.g. for the browser platform:
  
  BEFORE:
  ```
  import {setBaseTestProviders} from ‘@angular/core/testing’;
  import {TEST_BROWSER_DYNAMIC_PLATFORM_PROVIDERS,
      TEST_BROWSER_DYNAMIC_APPLICATION_PROVIDERS} from ‘@angular/platform-browser-dynamic/testing’;
  
  setBaseTestProviders(TEST_BROWSER_DYNAMIC_PLATFORM_PROVIDERS,
      TEST_BROWSER_DYNAMIC_APPLICATION_PROVIDERS);   
  ```
  AFTER:
  ```
  import {setBaseTestProviders} from ‘@angular/core/testing’;
  import {browserTestCompiler, browserDynamicTestPlatform,
      BrowserDynamicTestModule} from ‘@angular/platform-browser-dynamic/testing’;
  
  initTestEnvironment(
      browserTestCompiler,
      browserDynamicTestPlatform(),
      BrowserDynamicTestModule);
  ```
- E.g. for the server platform:
  
  BEFORE:
  ```
  import {setBaseTestProviders} from ‘@angular/core/testing’;
  import {TEST_SERVER_PLATFORM_PROVIDERS,
      TEST_SERVER_APPLICATION_PROVIDERS} from ‘@angular/platform-server/testing/server’;
  
  setBaseTestProviders(TEST_SERVER_PLATFORM_PROVIDERS,
      TEST_SERVER_APPLICATION_PROVIDERS);   
  ```
  AFTER:
  ```
  import {setBaseTestProviders} from ‘@angular/core/testing’;
  import {serverTestCompiler, serverTestPlatform,
      ServerTestModule} from ‘@angular/platform-browser-dynamic/testing’;
  
  initTestEnvironment(
      serverTestCompiler,
      serverTestPlatform(),
      ServerTestModule);
  ```
Related to #9726
Closes #9846
											 
										 
										
											2016-07-04 09:37:30 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2019-01-22 15:02:52 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        it ( 'should use set up directives and pipes' ,  ( )  = >  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								          const  compFixture  =  TestBed . createComponent ( CompUsingModuleDirectiveAndPipe ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								          const  el  =  compFixture . debugElement ; 
							 
						 
					
						
							
								
									
										
											 
										
											
												feat(testing): add implicit test module
Every test now has an implicit module. It can be configured via `configureModule` (from @angular/core/testing)
to add providers, directives, pipes, ...
The compiler now has to be configured separately via `configureCompiler` (from @angular/core/testing)
to add providers or define whether to use jit.
BREAKING CHANGE:
- Application providers can no longer inject compiler internals (i.e. everything
  from `@angular/compiler). Inject `Compiler` instead. This reflects the
  changes to `bootstrap` for module support (3f55aa609f60f130f1d69188ed057214b1267cb3).
- Compiler providers can no longer be added via `addProviders` / `withProviders`.
  Use the new method `configureCompiler` instead.
- Platform directives / pipes need to be provided via
  `configureModule` and can no longer be provided via the
  `PLATFORM_PIPES` / `PLATFORM_DIRECTIVES` tokens.
- `setBaseTestProviders()` was renamed into `initTestEnvironment` and 
  now takes a `PlatformRef` and a factory for a
  `Compiler`.
- E.g. for the browser platform:
  
  BEFORE:
  ```
  import {setBaseTestProviders} from ‘@angular/core/testing’;
  import {TEST_BROWSER_DYNAMIC_PLATFORM_PROVIDERS,
      TEST_BROWSER_DYNAMIC_APPLICATION_PROVIDERS} from ‘@angular/platform-browser-dynamic/testing’;
  
  setBaseTestProviders(TEST_BROWSER_DYNAMIC_PLATFORM_PROVIDERS,
      TEST_BROWSER_DYNAMIC_APPLICATION_PROVIDERS);   
  ```
  AFTER:
  ```
  import {setBaseTestProviders} from ‘@angular/core/testing’;
  import {browserTestCompiler, browserDynamicTestPlatform,
      BrowserDynamicTestModule} from ‘@angular/platform-browser-dynamic/testing’;
  
  initTestEnvironment(
      browserTestCompiler,
      browserDynamicTestPlatform(),
      BrowserDynamicTestModule);
  ```
- E.g. for the server platform:
  
  BEFORE:
  ```
  import {setBaseTestProviders} from ‘@angular/core/testing’;
  import {TEST_SERVER_PLATFORM_PROVIDERS,
      TEST_SERVER_APPLICATION_PROVIDERS} from ‘@angular/platform-server/testing/server’;
  
  setBaseTestProviders(TEST_SERVER_PLATFORM_PROVIDERS,
      TEST_SERVER_APPLICATION_PROVIDERS);   
  ```
  AFTER:
  ```
  import {setBaseTestProviders} from ‘@angular/core/testing’;
  import {serverTestCompiler, serverTestPlatform,
      ServerTestModule} from ‘@angular/platform-browser-dynamic/testing’;
  
  initTestEnvironment(
      serverTestCompiler,
      serverTestPlatform(),
      ServerTestModule);
  ```
Related to #9726
Closes #9846
											 
										 
										
											2016-07-04 09:37:30 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2019-01-22 15:02:52 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								          compFixture . detectChanges ( ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								          expect ( el . children [ 0 ] . properties [ 'title' ] ) . toBe ( 'transformed someValue' ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        } ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2016-07-28 04:54:49 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-08-10 11:51:40 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        it ( 'should use set up imported modules' , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								           inject ( [ SomeLibModule ] ,  ( libModule : SomeLibModule )  = >  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								             expect ( libModule ) . toBeAnInstanceOf ( SomeLibModule ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								           } ) ) ; 
							 
						 
					
						
							
								
									
										
											 
										
											
												feat(testing): add implicit test module
Every test now has an implicit module. It can be configured via `configureModule` (from @angular/core/testing)
to add providers, directives, pipes, ...
The compiler now has to be configured separately via `configureCompiler` (from @angular/core/testing)
to add providers or define whether to use jit.
BREAKING CHANGE:
- Application providers can no longer inject compiler internals (i.e. everything
  from `@angular/compiler). Inject `Compiler` instead. This reflects the
  changes to `bootstrap` for module support (3f55aa609f60f130f1d69188ed057214b1267cb3).
- Compiler providers can no longer be added via `addProviders` / `withProviders`.
  Use the new method `configureCompiler` instead.
- Platform directives / pipes need to be provided via
  `configureModule` and can no longer be provided via the
  `PLATFORM_PIPES` / `PLATFORM_DIRECTIVES` tokens.
- `setBaseTestProviders()` was renamed into `initTestEnvironment` and 
  now takes a `PlatformRef` and a factory for a
  `Compiler`.
- E.g. for the browser platform:
  
  BEFORE:
  ```
  import {setBaseTestProviders} from ‘@angular/core/testing’;
  import {TEST_BROWSER_DYNAMIC_PLATFORM_PROVIDERS,
      TEST_BROWSER_DYNAMIC_APPLICATION_PROVIDERS} from ‘@angular/platform-browser-dynamic/testing’;
  
  setBaseTestProviders(TEST_BROWSER_DYNAMIC_PLATFORM_PROVIDERS,
      TEST_BROWSER_DYNAMIC_APPLICATION_PROVIDERS);   
  ```
  AFTER:
  ```
  import {setBaseTestProviders} from ‘@angular/core/testing’;
  import {browserTestCompiler, browserDynamicTestPlatform,
      BrowserDynamicTestModule} from ‘@angular/platform-browser-dynamic/testing’;
  
  initTestEnvironment(
      browserTestCompiler,
      browserDynamicTestPlatform(),
      BrowserDynamicTestModule);
  ```
- E.g. for the server platform:
  
  BEFORE:
  ```
  import {setBaseTestProviders} from ‘@angular/core/testing’;
  import {TEST_SERVER_PLATFORM_PROVIDERS,
      TEST_SERVER_APPLICATION_PROVIDERS} from ‘@angular/platform-server/testing/server’;
  
  setBaseTestProviders(TEST_SERVER_PLATFORM_PROVIDERS,
      TEST_SERVER_APPLICATION_PROVIDERS);   
  ```
  AFTER:
  ```
  import {setBaseTestProviders} from ‘@angular/core/testing’;
  import {serverTestCompiler, serverTestPlatform,
      ServerTestModule} from ‘@angular/platform-browser-dynamic/testing’;
  
  initTestEnvironment(
      serverTestCompiler,
      serverTestPlatform(),
      ServerTestModule);
  ```
Related to #9726
Closes #9846
											 
										 
										
											2016-07-04 09:37:30 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-08-10 11:51:40 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        describe ( 'provided schemas' ,  ( )  = >  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								          @Component ( { template :  '<some-element [someUnknownProp]="true"></some-element>' } ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								          class  ComponentUsingInvalidProperty  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								          } 
							 
						 
					
						
							
								
									
										
										
										
											2016-07-25 03:02:57 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-08-10 11:51:40 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								          beforeEach ( ( )  = >  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            TestBed . configureTestingModule ( 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                { schemas :  [ CUSTOM_ELEMENTS_SCHEMA ] ,  declarations :  [ ComponentUsingInvalidProperty ] } ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								          } ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2016-07-25 03:02:57 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-08-10 11:51:40 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								          it ( 'should not error on unknown bound properties on custom elements when using the CUSTOM_ELEMENTS_SCHEMA' , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								             ( )  = >  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								               expect ( TestBed . createComponent ( ComponentUsingInvalidProperty ) . componentInstance ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                   . toBeAnInstanceOf ( ComponentUsingInvalidProperty ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								             } ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        } ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2016-07-25 03:02:57 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								      } ) ; 
							 
						 
					
						
							
								
									
										
											 
										
											
												feat(testing): add implicit test module
Every test now has an implicit module. It can be configured via `configureModule` (from @angular/core/testing)
to add providers, directives, pipes, ...
The compiler now has to be configured separately via `configureCompiler` (from @angular/core/testing)
to add providers or define whether to use jit.
BREAKING CHANGE:
- Application providers can no longer inject compiler internals (i.e. everything
  from `@angular/compiler). Inject `Compiler` instead. This reflects the
  changes to `bootstrap` for module support (3f55aa609f60f130f1d69188ed057214b1267cb3).
- Compiler providers can no longer be added via `addProviders` / `withProviders`.
  Use the new method `configureCompiler` instead.
- Platform directives / pipes need to be provided via
  `configureModule` and can no longer be provided via the
  `PLATFORM_PIPES` / `PLATFORM_DIRECTIVES` tokens.
- `setBaseTestProviders()` was renamed into `initTestEnvironment` and 
  now takes a `PlatformRef` and a factory for a
  `Compiler`.
- E.g. for the browser platform:
  
  BEFORE:
  ```
  import {setBaseTestProviders} from ‘@angular/core/testing’;
  import {TEST_BROWSER_DYNAMIC_PLATFORM_PROVIDERS,
      TEST_BROWSER_DYNAMIC_APPLICATION_PROVIDERS} from ‘@angular/platform-browser-dynamic/testing’;
  
  setBaseTestProviders(TEST_BROWSER_DYNAMIC_PLATFORM_PROVIDERS,
      TEST_BROWSER_DYNAMIC_APPLICATION_PROVIDERS);   
  ```
  AFTER:
  ```
  import {setBaseTestProviders} from ‘@angular/core/testing’;
  import {browserTestCompiler, browserDynamicTestPlatform,
      BrowserDynamicTestModule} from ‘@angular/platform-browser-dynamic/testing’;
  
  initTestEnvironment(
      browserTestCompiler,
      browserDynamicTestPlatform(),
      BrowserDynamicTestModule);
  ```
- E.g. for the server platform:
  
  BEFORE:
  ```
  import {setBaseTestProviders} from ‘@angular/core/testing’;
  import {TEST_SERVER_PLATFORM_PROVIDERS,
      TEST_SERVER_APPLICATION_PROVIDERS} from ‘@angular/platform-server/testing/server’;
  
  setBaseTestProviders(TEST_SERVER_PLATFORM_PROVIDERS,
      TEST_SERVER_APPLICATION_PROVIDERS);   
  ```
  AFTER:
  ```
  import {setBaseTestProviders} from ‘@angular/core/testing’;
  import {serverTestCompiler, serverTestPlatform,
      ServerTestModule} from ‘@angular/platform-browser-dynamic/testing’;
  
  initTestEnvironment(
      serverTestCompiler,
      serverTestPlatform(),
      ServerTestModule);
  ```
Related to #9726
Closes #9846
											 
										 
										
											2016-07-04 09:37:30 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-08-10 11:51:40 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								      describe ( 'per test modules' ,  ( )  = >  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        it ( 'should use set up providers' , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								           withModule ( moduleConfig ) . inject ( [ FancyService ] ,  ( service : FancyService )  = >  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								             expect ( service . value ) . toEqual ( 'real value' ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								           } ) ) ; 
							 
						 
					
						
							
								
									
										
											 
										
											
												feat(testing): add implicit test module
Every test now has an implicit module. It can be configured via `configureModule` (from @angular/core/testing)
to add providers, directives, pipes, ...
The compiler now has to be configured separately via `configureCompiler` (from @angular/core/testing)
to add providers or define whether to use jit.
BREAKING CHANGE:
- Application providers can no longer inject compiler internals (i.e. everything
  from `@angular/compiler). Inject `Compiler` instead. This reflects the
  changes to `bootstrap` for module support (3f55aa609f60f130f1d69188ed057214b1267cb3).
- Compiler providers can no longer be added via `addProviders` / `withProviders`.
  Use the new method `configureCompiler` instead.
- Platform directives / pipes need to be provided via
  `configureModule` and can no longer be provided via the
  `PLATFORM_PIPES` / `PLATFORM_DIRECTIVES` tokens.
- `setBaseTestProviders()` was renamed into `initTestEnvironment` and 
  now takes a `PlatformRef` and a factory for a
  `Compiler`.
- E.g. for the browser platform:
  
  BEFORE:
  ```
  import {setBaseTestProviders} from ‘@angular/core/testing’;
  import {TEST_BROWSER_DYNAMIC_PLATFORM_PROVIDERS,
      TEST_BROWSER_DYNAMIC_APPLICATION_PROVIDERS} from ‘@angular/platform-browser-dynamic/testing’;
  
  setBaseTestProviders(TEST_BROWSER_DYNAMIC_PLATFORM_PROVIDERS,
      TEST_BROWSER_DYNAMIC_APPLICATION_PROVIDERS);   
  ```
  AFTER:
  ```
  import {setBaseTestProviders} from ‘@angular/core/testing’;
  import {browserTestCompiler, browserDynamicTestPlatform,
      BrowserDynamicTestModule} from ‘@angular/platform-browser-dynamic/testing’;
  
  initTestEnvironment(
      browserTestCompiler,
      browserDynamicTestPlatform(),
      BrowserDynamicTestModule);
  ```
- E.g. for the server platform:
  
  BEFORE:
  ```
  import {setBaseTestProviders} from ‘@angular/core/testing’;
  import {TEST_SERVER_PLATFORM_PROVIDERS,
      TEST_SERVER_APPLICATION_PROVIDERS} from ‘@angular/platform-server/testing/server’;
  
  setBaseTestProviders(TEST_SERVER_PLATFORM_PROVIDERS,
      TEST_SERVER_APPLICATION_PROVIDERS);   
  ```
  AFTER:
  ```
  import {setBaseTestProviders} from ‘@angular/core/testing’;
  import {serverTestCompiler, serverTestPlatform,
      ServerTestModule} from ‘@angular/platform-browser-dynamic/testing’;
  
  initTestEnvironment(
      serverTestCompiler,
      serverTestPlatform(),
      ServerTestModule);
  ```
Related to #9726
Closes #9846
											 
										 
										
											2016-07-04 09:37:30 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2019-01-22 15:02:52 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        it ( 'should use set up directives and pipes' ,  withModule ( moduleConfig ,  ( )  = >  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								             const  compFixture  =  TestBed . createComponent ( CompUsingModuleDirectiveAndPipe ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								             const  el  =  compFixture . debugElement ; 
							 
						 
					
						
							
								
									
										
											 
										
											
												feat(testing): add implicit test module
Every test now has an implicit module. It can be configured via `configureModule` (from @angular/core/testing)
to add providers, directives, pipes, ...
The compiler now has to be configured separately via `configureCompiler` (from @angular/core/testing)
to add providers or define whether to use jit.
BREAKING CHANGE:
- Application providers can no longer inject compiler internals (i.e. everything
  from `@angular/compiler). Inject `Compiler` instead. This reflects the
  changes to `bootstrap` for module support (3f55aa609f60f130f1d69188ed057214b1267cb3).
- Compiler providers can no longer be added via `addProviders` / `withProviders`.
  Use the new method `configureCompiler` instead.
- Platform directives / pipes need to be provided via
  `configureModule` and can no longer be provided via the
  `PLATFORM_PIPES` / `PLATFORM_DIRECTIVES` tokens.
- `setBaseTestProviders()` was renamed into `initTestEnvironment` and 
  now takes a `PlatformRef` and a factory for a
  `Compiler`.
- E.g. for the browser platform:
  
  BEFORE:
  ```
  import {setBaseTestProviders} from ‘@angular/core/testing’;
  import {TEST_BROWSER_DYNAMIC_PLATFORM_PROVIDERS,
      TEST_BROWSER_DYNAMIC_APPLICATION_PROVIDERS} from ‘@angular/platform-browser-dynamic/testing’;
  
  setBaseTestProviders(TEST_BROWSER_DYNAMIC_PLATFORM_PROVIDERS,
      TEST_BROWSER_DYNAMIC_APPLICATION_PROVIDERS);   
  ```
  AFTER:
  ```
  import {setBaseTestProviders} from ‘@angular/core/testing’;
  import {browserTestCompiler, browserDynamicTestPlatform,
      BrowserDynamicTestModule} from ‘@angular/platform-browser-dynamic/testing’;
  
  initTestEnvironment(
      browserTestCompiler,
      browserDynamicTestPlatform(),
      BrowserDynamicTestModule);
  ```
- E.g. for the server platform:
  
  BEFORE:
  ```
  import {setBaseTestProviders} from ‘@angular/core/testing’;
  import {TEST_SERVER_PLATFORM_PROVIDERS,
      TEST_SERVER_APPLICATION_PROVIDERS} from ‘@angular/platform-server/testing/server’;
  
  setBaseTestProviders(TEST_SERVER_PLATFORM_PROVIDERS,
      TEST_SERVER_APPLICATION_PROVIDERS);   
  ```
  AFTER:
  ```
  import {setBaseTestProviders} from ‘@angular/core/testing’;
  import {serverTestCompiler, serverTestPlatform,
      ServerTestModule} from ‘@angular/platform-browser-dynamic/testing’;
  
  initTestEnvironment(
      serverTestCompiler,
      serverTestPlatform(),
      ServerTestModule);
  ```
Related to #9726
Closes #9846
											 
										 
										
											2016-07-04 09:37:30 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2019-01-22 15:02:52 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								             compFixture . detectChanges ( ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								             expect ( el . children [ 0 ] . properties [ 'title' ] ) . toBe ( 'transformed someValue' ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								           } ) ) ; 
							 
						 
					
						
							
								
									
										
											 
										
											
												feat(testing): add implicit test module
Every test now has an implicit module. It can be configured via `configureModule` (from @angular/core/testing)
to add providers, directives, pipes, ...
The compiler now has to be configured separately via `configureCompiler` (from @angular/core/testing)
to add providers or define whether to use jit.
BREAKING CHANGE:
- Application providers can no longer inject compiler internals (i.e. everything
  from `@angular/compiler). Inject `Compiler` instead. This reflects the
  changes to `bootstrap` for module support (3f55aa609f60f130f1d69188ed057214b1267cb3).
- Compiler providers can no longer be added via `addProviders` / `withProviders`.
  Use the new method `configureCompiler` instead.
- Platform directives / pipes need to be provided via
  `configureModule` and can no longer be provided via the
  `PLATFORM_PIPES` / `PLATFORM_DIRECTIVES` tokens.
- `setBaseTestProviders()` was renamed into `initTestEnvironment` and 
  now takes a `PlatformRef` and a factory for a
  `Compiler`.
- E.g. for the browser platform:
  
  BEFORE:
  ```
  import {setBaseTestProviders} from ‘@angular/core/testing’;
  import {TEST_BROWSER_DYNAMIC_PLATFORM_PROVIDERS,
      TEST_BROWSER_DYNAMIC_APPLICATION_PROVIDERS} from ‘@angular/platform-browser-dynamic/testing’;
  
  setBaseTestProviders(TEST_BROWSER_DYNAMIC_PLATFORM_PROVIDERS,
      TEST_BROWSER_DYNAMIC_APPLICATION_PROVIDERS);   
  ```
  AFTER:
  ```
  import {setBaseTestProviders} from ‘@angular/core/testing’;
  import {browserTestCompiler, browserDynamicTestPlatform,
      BrowserDynamicTestModule} from ‘@angular/platform-browser-dynamic/testing’;
  
  initTestEnvironment(
      browserTestCompiler,
      browserDynamicTestPlatform(),
      BrowserDynamicTestModule);
  ```
- E.g. for the server platform:
  
  BEFORE:
  ```
  import {setBaseTestProviders} from ‘@angular/core/testing’;
  import {TEST_SERVER_PLATFORM_PROVIDERS,
      TEST_SERVER_APPLICATION_PROVIDERS} from ‘@angular/platform-server/testing/server’;
  
  setBaseTestProviders(TEST_SERVER_PLATFORM_PROVIDERS,
      TEST_SERVER_APPLICATION_PROVIDERS);   
  ```
  AFTER:
  ```
  import {setBaseTestProviders} from ‘@angular/core/testing’;
  import {serverTestCompiler, serverTestPlatform,
      ServerTestModule} from ‘@angular/platform-browser-dynamic/testing’;
  
  initTestEnvironment(
      serverTestCompiler,
      serverTestPlatform(),
      ServerTestModule);
  ```
Related to #9726
Closes #9846
											 
										 
										
											2016-07-04 09:37:30 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-08-10 11:51:40 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        it ( 'should use set up library modules' , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								           withModule ( moduleConfig ) . inject ( [ SomeLibModule ] ,  ( libModule : SomeLibModule )  = >  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								             expect ( libModule ) . toBeAnInstanceOf ( SomeLibModule ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								           } ) ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      } ) ; 
							 
						 
					
						
							
								
									
										
											 
										
											
												feat(testing): add implicit test module
Every test now has an implicit module. It can be configured via `configureModule` (from @angular/core/testing)
to add providers, directives, pipes, ...
The compiler now has to be configured separately via `configureCompiler` (from @angular/core/testing)
to add providers or define whether to use jit.
BREAKING CHANGE:
- Application providers can no longer inject compiler internals (i.e. everything
  from `@angular/compiler). Inject `Compiler` instead. This reflects the
  changes to `bootstrap` for module support (3f55aa609f60f130f1d69188ed057214b1267cb3).
- Compiler providers can no longer be added via `addProviders` / `withProviders`.
  Use the new method `configureCompiler` instead.
- Platform directives / pipes need to be provided via
  `configureModule` and can no longer be provided via the
  `PLATFORM_PIPES` / `PLATFORM_DIRECTIVES` tokens.
- `setBaseTestProviders()` was renamed into `initTestEnvironment` and 
  now takes a `PlatformRef` and a factory for a
  `Compiler`.
- E.g. for the browser platform:
  
  BEFORE:
  ```
  import {setBaseTestProviders} from ‘@angular/core/testing’;
  import {TEST_BROWSER_DYNAMIC_PLATFORM_PROVIDERS,
      TEST_BROWSER_DYNAMIC_APPLICATION_PROVIDERS} from ‘@angular/platform-browser-dynamic/testing’;
  
  setBaseTestProviders(TEST_BROWSER_DYNAMIC_PLATFORM_PROVIDERS,
      TEST_BROWSER_DYNAMIC_APPLICATION_PROVIDERS);   
  ```
  AFTER:
  ```
  import {setBaseTestProviders} from ‘@angular/core/testing’;
  import {browserTestCompiler, browserDynamicTestPlatform,
      BrowserDynamicTestModule} from ‘@angular/platform-browser-dynamic/testing’;
  
  initTestEnvironment(
      browserTestCompiler,
      browserDynamicTestPlatform(),
      BrowserDynamicTestModule);
  ```
- E.g. for the server platform:
  
  BEFORE:
  ```
  import {setBaseTestProviders} from ‘@angular/core/testing’;
  import {TEST_SERVER_PLATFORM_PROVIDERS,
      TEST_SERVER_APPLICATION_PROVIDERS} from ‘@angular/platform-server/testing/server’;
  
  setBaseTestProviders(TEST_SERVER_PLATFORM_PROVIDERS,
      TEST_SERVER_APPLICATION_PROVIDERS);   
  ```
  AFTER:
  ```
  import {setBaseTestProviders} from ‘@angular/core/testing’;
  import {serverTestCompiler, serverTestPlatform,
      ServerTestModule} from ‘@angular/platform-browser-dynamic/testing’;
  
  initTestEnvironment(
      serverTestCompiler,
      serverTestPlatform(),
      ServerTestModule);
  ```
Related to #9726
Closes #9846
											 
										 
										
											2016-07-04 09:37:30 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-08-10 11:51:40 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								      describe ( 'components with template url' ,  ( )  = >  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        beforeEach ( async ( ( )  = >  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								          TestBed . configureTestingModule ( { declarations :  [ CompWithUrlTemplate ] } ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								          TestBed . compileComponents ( ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        } ) ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2016-07-28 04:54:49 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2018-12-03 17:57:07 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        isBrowser  && 
							 
						 
					
						
							
								
									
										
										
										
											2019-01-14 14:46:21 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            it ( 'should allow to createSync components with templateUrl after explicit async compilation' , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								               ( )  = >  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                 const  fixture  =  TestBed . createComponent ( CompWithUrlTemplate ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                 expect ( fixture . nativeElement ) . toHaveText ( 'from external template' ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								               } ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2016-08-10 11:51:40 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								      } ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2016-07-28 04:54:49 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-08-10 11:51:40 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								      describe ( 'overwriting metadata' ,  ( )  = >  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        @Pipe ( { name :  'undefined' } ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        class  SomePipe  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								          transform ( value : string ) :  string  {  return  ` transformed  ${ value } ` ;  } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
									
										
										
										
											2016-07-28 04:54:49 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-08-10 11:51:40 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        @Directive ( { selector :  '[undefined]' } ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        class  SomeDirective  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								          someProp  =  'hello' ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
									
										
										
										
											2016-07-28 04:54:49 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-08-10 11:51:40 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        @Component ( { selector :  'comp' ,  template :  'someText' } ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        class  SomeComponent  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
									
										
										
										
											2016-07-28 04:54:49 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-08-10 11:51:40 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        @Component ( { selector :  'comp' ,  template :  'someOtherText' } ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        class  SomeOtherComponent  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
									
										
										
										
											2016-07-28 04:54:49 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-08-10 11:51:40 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        @NgModule ( { declarations :  [ SomeComponent ,  SomeDirective ,  SomePipe ] } ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        class  SomeModule  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        } 
							 
						 
					
						
							
								
									
										
										
										
											2016-07-28 04:54:49 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-10-30 20:39:53 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        beforeEach ( ( )  = >  TestBed . configureTestingModule ( { imports :  [ SomeModule ] } ) ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2016-07-28 04:54:49 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-08-10 11:51:40 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        describe ( 'module' ,  ( )  = >  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								          beforeEach ( ( )  = >  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            TestBed . overrideModule ( SomeModule ,  { set :  { declarations :  [ SomeOtherComponent ] } } ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								          } ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								          it ( 'should work' ,  ( )  = >  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            expect ( TestBed . createComponent ( SomeOtherComponent ) . componentInstance ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                . toBeAnInstanceOf ( SomeOtherComponent ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								          } ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2016-07-28 04:54:49 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        } ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-08-10 11:51:40 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        describe ( 'component' ,  ( )  = >  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								          beforeEach ( ( )  = >  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            TestBed . overrideComponent ( 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                SomeComponent ,  { set :  { selector :  'comp' ,  template :  'newText' } } ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								          } ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								          it ( 'should work' ,  ( )  = >  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            expect ( TestBed . createComponent ( SomeComponent ) . nativeElement ) . toHaveText ( 'newText' ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								          } ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2016-07-28 04:54:49 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        } ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-08-10 11:51:40 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        describe ( 'directive' ,  ( )  = >  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								          beforeEach ( ( )  = >  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            TestBed 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                . overrideComponent ( 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                    SomeComponent ,  { set :  { selector :  'comp' ,  template :  ` <div someDir></div> ` } } ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                . overrideDirective ( 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                    SomeDirective ,  { set :  { selector :  '[someDir]' ,  host :  { '[title]' :  'someProp' } } } ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								          } ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2019-01-22 15:02:52 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								          it ( 'should work' ,  ( )  = >  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            const  compFixture  =  TestBed . createComponent ( SomeComponent ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            compFixture . detectChanges ( ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            expect ( compFixture . debugElement . children [ 0 ] . properties [ 'title' ] ) . toEqual ( 'hello' ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								          } ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2016-07-28 04:54:49 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        } ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2016-08-10 11:51:40 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        describe ( 'pipe' ,  ( )  = >  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								          beforeEach ( ( )  = >  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            TestBed 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                . overrideComponent ( 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                    SomeComponent ,  { set :  { selector :  'comp' ,  template :  ` {{'hello' | somePipe}} ` } } ) 
							 
						 
					
						
							
								
									
										
										
										
											2018-05-24 15:49:07 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                . overridePipe ( SomePipe ,  { set :  { name :  'somePipe' } } ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                . overridePipe ( SomePipe ,  { add :  { pure : false } } ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2016-08-10 11:51:40 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								          } ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2018-12-18 10:30:14 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								          it ( 'should work' ,  ( )  = >  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            const  compFixture  =  TestBed . createComponent ( SomeComponent ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            compFixture . detectChanges ( ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            expect ( compFixture . nativeElement ) . toHaveText ( 'transformed hello' ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								          } ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2016-07-28 04:54:49 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        } ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2016-12-15 02:05:17 +03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        describe ( 'template' ,  ( )  = >  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								          let  testBedSpy : any ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								          beforeEach ( ( )  = >  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            testBedSpy  =  spyOn ( getTestBed ( ) ,  'overrideComponent' ) . and . callThrough ( ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            TestBed . overrideTemplate ( SomeComponent ,  'newText' ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								          } ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								          it ( ` should override component's template ` ,  ( )  = >  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            const  fixture  =  TestBed . createComponent ( SomeComponent ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            expect ( fixture . nativeElement ) . toHaveText ( 'newText' ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            expect ( testBedSpy ) . toHaveBeenCalledWith ( SomeComponent ,  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								              set :  { template :  'newText' ,  templateUrl : null } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            } ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								          } ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        } ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2016-07-28 04:54:49 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								      } ) ; 
							 
						 
					
						
							
								
									
										
											 
										
											
												feat(testing): add implicit test module
Every test now has an implicit module. It can be configured via `configureModule` (from @angular/core/testing)
to add providers, directives, pipes, ...
The compiler now has to be configured separately via `configureCompiler` (from @angular/core/testing)
to add providers or define whether to use jit.
BREAKING CHANGE:
- Application providers can no longer inject compiler internals (i.e. everything
  from `@angular/compiler). Inject `Compiler` instead. This reflects the
  changes to `bootstrap` for module support (3f55aa609f60f130f1d69188ed057214b1267cb3).
- Compiler providers can no longer be added via `addProviders` / `withProviders`.
  Use the new method `configureCompiler` instead.
- Platform directives / pipes need to be provided via
  `configureModule` and can no longer be provided via the
  `PLATFORM_PIPES` / `PLATFORM_DIRECTIVES` tokens.
- `setBaseTestProviders()` was renamed into `initTestEnvironment` and 
  now takes a `PlatformRef` and a factory for a
  `Compiler`.
- E.g. for the browser platform:
  
  BEFORE:
  ```
  import {setBaseTestProviders} from ‘@angular/core/testing’;
  import {TEST_BROWSER_DYNAMIC_PLATFORM_PROVIDERS,
      TEST_BROWSER_DYNAMIC_APPLICATION_PROVIDERS} from ‘@angular/platform-browser-dynamic/testing’;
  
  setBaseTestProviders(TEST_BROWSER_DYNAMIC_PLATFORM_PROVIDERS,
      TEST_BROWSER_DYNAMIC_APPLICATION_PROVIDERS);   
  ```
  AFTER:
  ```
  import {setBaseTestProviders} from ‘@angular/core/testing’;
  import {browserTestCompiler, browserDynamicTestPlatform,
      BrowserDynamicTestModule} from ‘@angular/platform-browser-dynamic/testing’;
  
  initTestEnvironment(
      browserTestCompiler,
      browserDynamicTestPlatform(),
      BrowserDynamicTestModule);
  ```
- E.g. for the server platform:
  
  BEFORE:
  ```
  import {setBaseTestProviders} from ‘@angular/core/testing’;
  import {TEST_SERVER_PLATFORM_PROVIDERS,
      TEST_SERVER_APPLICATION_PROVIDERS} from ‘@angular/platform-server/testing/server’;
  
  setBaseTestProviders(TEST_SERVER_PLATFORM_PROVIDERS,
      TEST_SERVER_APPLICATION_PROVIDERS);   
  ```
  AFTER:
  ```
  import {setBaseTestProviders} from ‘@angular/core/testing’;
  import {serverTestCompiler, serverTestPlatform,
      ServerTestModule} from ‘@angular/platform-browser-dynamic/testing’;
  
  initTestEnvironment(
      serverTestCompiler,
      serverTestPlatform(),
      ServerTestModule);
  ```
Related to #9726
Closes #9846
											 
										 
										
											2016-07-04 09:37:30 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2017-05-15 13:12:10 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								      describe ( 'overriding providers' ,  ( )  = >  { 
							 
						 
					
						
							
								
									
										
										
										
											2019-09-06 09:26:17 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        describe ( 'in core' ,  ( )  = >  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								          it ( 'ComponentFactoryResolver' ,  ( )  = >  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            const  componentFactoryMock  = 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                jasmine . createSpyObj ( 'componentFactory' ,  [ 'resolveComponentFactory' ] ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            TestBed . overrideProvider ( ComponentFactoryResolver ,  { useValue : componentFactoryMock } ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            expect ( TestBed . get ( ComponentFactoryResolver ) ) . toEqual ( componentFactoryMock ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								          } ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        } ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2017-05-15 13:12:10 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        describe ( 'in NgModules' ,  ( )  = >  { 
							 
						 
					
						
							
								
									
										
										
										
											2019-08-28 16:22:36 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2017-05-15 13:12:10 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								          it ( 'should support useValue' ,  ( )  = >  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            TestBed . configureTestingModule ( { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								              providers :  [ 
							 
						 
					
						
							
								
									
										
										
										
											2019-08-28 16:22:36 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                { provide : aTok ,  useValue :  'aValue' } , 
							 
						 
					
						
							
								
									
										
										
										
											2017-05-15 13:12:10 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								              ] 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            } ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2019-08-28 16:22:36 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            TestBed . overrideProvider ( aTok ,  { useValue :  'mockValue' } ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            expect ( TestBed . inject ( aTok ) ) . toBe ( 'mockValue' ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2017-05-15 13:12:10 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								          } ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								          it ( 'should support useFactory' ,  ( )  = >  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            TestBed . configureTestingModule ( { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								              providers :  [ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                { provide :  'dep' ,  useValue :  'depValue' } , 
							 
						 
					
						
							
								
									
										
										
										
											2019-08-28 16:22:36 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                { provide : aTok ,  useValue :  'aValue' } , 
							 
						 
					
						
							
								
									
										
										
										
											2017-05-15 13:12:10 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								              ] 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            } ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            TestBed . overrideProvider ( 
							 
						 
					
						
							
								
									
										
										
										
											2019-08-28 16:22:36 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                aTok ,  { useFactory :  ( dep : any )  = >  ` mockA:  ${ dep } ` ,  deps :  [ 'dep' ] } ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            expect ( TestBed . inject ( aTok ) ) . toBe ( 'mockA: depValue' ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2017-05-15 13:12:10 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								          } ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								          it ( 'should support @Optional without matches' ,  ( )  = >  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            TestBed . configureTestingModule ( { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								              providers :  [ 
							 
						 
					
						
							
								
									
										
										
										
											2019-08-28 16:22:36 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                { provide : aTok ,  useValue :  'aValue' } , 
							 
						 
					
						
							
								
									
										
										
										
											2017-05-15 13:12:10 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								              ] 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            } ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            TestBed . overrideProvider ( 
							 
						 
					
						
							
								
									
										
										
										
											2019-08-28 16:22:36 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                aTok ,  { useFactory :  ( dep : any )  = >  ` mockA:  ${ dep } ` ,  deps :  [ [ new  Optional ( ) ,  'dep' ] ] } ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            expect ( TestBed . inject ( aTok ) ) . toBe ( 'mockA: null' ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2017-05-15 13:12:10 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								          } ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								          it ( 'should support Optional with matches' ,  ( )  = >  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            TestBed . configureTestingModule ( { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								              providers :  [ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                { provide :  'dep' ,  useValue :  'depValue' } , 
							 
						 
					
						
							
								
									
										
										
										
											2019-08-28 16:22:36 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                { provide : aTok ,  useValue :  'aValue' } , 
							 
						 
					
						
							
								
									
										
										
										
											2017-05-15 13:12:10 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								              ] 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            } ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            TestBed . overrideProvider ( 
							 
						 
					
						
							
								
									
										
										
										
											2019-08-28 16:22:36 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                aTok ,  { useFactory :  ( dep : any )  = >  ` mockA:  ${ dep } ` ,  deps :  [ [ new  Optional ( ) ,  'dep' ] ] } ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            expect ( TestBed . inject ( aTok ) ) . toBe ( 'mockA: depValue' ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2017-05-15 13:12:10 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								          } ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2019-01-11 21:19:55 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								          it ( 'should support SkipSelf' ,  ( )  = >  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            @NgModule ( { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								              providers :  [ 
							 
						 
					
						
							
								
									
										
										
										
											2019-08-28 16:22:36 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                { provide : aTok ,  useValue :  'aValue' } , 
							 
						 
					
						
							
								
									
										
										
										
											2019-01-11 21:19:55 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                { provide :  'dep' ,  useValue :  'depValue' } , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								              ] 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            } ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            class  MyModule  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            } 
							 
						 
					
						
							
								
									
										
										
										
											2017-05-15 13:12:10 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2019-01-11 21:19:55 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            TestBed . overrideProvider ( 
							 
						 
					
						
							
								
									
										
										
										
											2019-08-28 16:22:36 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                aTok ,  { useFactory :  ( dep : any )  = >  ` mockA:  ${ dep } ` ,  deps :  [ [ new  SkipSelf ( ) ,  'dep' ] ] } ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2019-01-11 21:19:55 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            TestBed . configureTestingModule ( 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                { providers :  [ { provide :  'dep' ,  useValue :  'parentDepValue' } ] } ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2017-05-15 13:12:10 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2019-08-28 16:22:36 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            const  compiler  =  TestBed . inject ( Compiler ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2019-01-11 21:19:55 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            const  modFactory  =  compiler . compileModuleSync ( MyModule ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2019-08-28 16:22:36 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            expect ( modFactory . create ( getTestBed ( ) ) . injector . get ( aTok ) ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                . toBe ( 'mockA: parentDepValue' ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2019-01-11 21:19:55 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								          } ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2017-05-15 13:12:10 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2017-10-04 09:13:22 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								          it ( 'should keep imported NgModules eager' ,  ( )  = >  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            let  someModule : SomeModule | undefined ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            @NgModule ( ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            class  SomeModule  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								              constructor ( )  {  someModule  =  this ;  } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            TestBed . configureTestingModule ( { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								              providers :  [ 
							 
						 
					
						
							
								
									
										
										
										
											2019-08-28 16:22:36 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                { provide : aTok ,  useValue :  'aValue' } , 
							 
						 
					
						
							
								
									
										
										
										
											2017-10-04 09:13:22 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								              ] , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								              imports :  [ SomeModule ] 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            } ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2019-08-28 16:22:36 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            TestBed . overrideProvider ( aTok ,  { useValue :  'mockValue' } ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2017-10-04 09:13:22 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2019-08-28 16:22:36 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            expect ( TestBed . inject ( aTok ) ) . toBe ( 'mockValue' ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2017-10-04 09:13:22 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            expect ( someModule ) . toBeAnInstanceOf ( SomeModule ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								          } ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2017-05-15 13:12:10 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								          describe ( 'injecting eager providers into an eager overwritten provider' ,  ( )  = >  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            @NgModule ( { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								              providers :  [ 
							 
						 
					
						
							
								
									
										
										
										
											2019-08-28 16:22:36 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                { provide : aTok ,  useFactory :  ( )  = >  'aValue' } , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                { provide : bTok ,  useFactory :  ( )  = >  'bValue' } , 
							 
						 
					
						
							
								
									
										
										
										
											2017-05-15 13:12:10 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								              ] 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            } ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            class  MyModule  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								              // NgModule is eager, which makes all of its deps eager
 
							 
						 
					
						
							
								
									
										
										
										
											2019-08-28 16:22:36 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								              constructor ( @Inject ( aTok )  a : any ,  @Inject ( bTok )  b : any )  { } 
							 
						 
					
						
							
								
									
										
										
										
											2017-05-15 13:12:10 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            it ( 'should inject providers that were declared before' ,  ( )  = >  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								              TestBed . configureTestingModule ( { imports :  [ MyModule ] } ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								              TestBed . overrideProvider ( 
							 
						 
					
						
							
								
									
										
										
										
											2019-08-28 16:22:36 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                  bTok ,  { useFactory :  ( a : string )  = >  ` mockB:  ${ a } ` ,  deps :  [ aTok ] } ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2017-05-15 13:12:10 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2019-08-28 16:22:36 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								              expect ( TestBed . inject ( bTok ) ) . toBe ( 'mockB: aValue' ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2017-05-15 13:12:10 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            } ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            it ( 'should inject providers that were declared afterwards' ,  ( )  = >  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								              TestBed . configureTestingModule ( { imports :  [ MyModule ] } ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								              TestBed . overrideProvider ( 
							 
						 
					
						
							
								
									
										
										
										
											2019-08-28 16:22:36 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                  aTok ,  { useFactory :  ( b : string )  = >  ` mockA:  ${ b } ` ,  deps :  [ bTok ] } ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2017-05-15 13:12:10 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2019-08-28 16:22:36 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								              expect ( TestBed . inject ( aTok ) ) . toBe ( 'mockA: bValue' ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2017-05-15 13:12:10 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            } ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								          } ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        } ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        describe ( 'in Components' ,  ( )  = >  { 
							 
						 
					
						
							
								
									
										
										
										
											2018-12-15 14:46:47 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								          it ( 'should support useValue' ,  ( )  = >  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            @Component ( { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								              template :  '' , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								              providers :  [ 
							 
						 
					
						
							
								
									
										
										
										
											2019-08-28 16:22:36 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                { provide : aTok ,  useValue :  'aValue' } , 
							 
						 
					
						
							
								
									
										
										
										
											2018-12-15 14:46:47 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								              ] 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            } ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            class  MComp  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            } 
							 
						 
					
						
							
								
									
										
										
										
											2017-05-15 13:12:10 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2019-08-28 16:22:36 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            TestBed . overrideProvider ( aTok ,  { useValue :  'mockValue' } ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2018-12-15 14:46:47 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            const  ctx  = 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                TestBed . configureTestingModule ( { declarations :  [ MComp ] } ) . createComponent ( MComp ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2017-05-15 13:12:10 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2019-08-28 16:22:36 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            expect ( ctx . debugElement . injector . get ( aTok ) ) . toBe ( 'mockValue' ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2018-12-15 14:46:47 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								          } ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2017-05-15 13:12:10 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2018-12-15 14:46:47 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								          it ( 'should support useFactory' ,  ( )  = >  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            @Component ( { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								              template :  '' , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								              providers :  [ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                { provide :  'dep' ,  useValue :  'depValue' } , 
							 
						 
					
						
							
								
									
										
										
										
											2019-08-28 16:22:36 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                { provide : aTok ,  useValue :  'aValue' } , 
							 
						 
					
						
							
								
									
										
										
										
											2018-12-15 14:46:47 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								              ] 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            } ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            class  MyComp  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            } 
							 
						 
					
						
							
								
									
										
										
										
											2017-05-15 13:12:10 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2018-12-15 14:46:47 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            TestBed . overrideProvider ( 
							 
						 
					
						
							
								
									
										
										
										
											2019-08-28 16:22:36 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                aTok ,  { useFactory :  ( dep : any )  = >  ` mockA:  ${ dep } ` ,  deps :  [ 'dep' ] } ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2018-12-15 14:46:47 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            const  ctx  = 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                TestBed . configureTestingModule ( { declarations :  [ MyComp ] } ) . createComponent ( MyComp ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2017-05-15 13:12:10 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2019-08-28 16:22:36 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            expect ( ctx . debugElement . injector . get ( aTok ) ) . toBe ( 'mockA: depValue' ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2018-12-15 14:46:47 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								          } ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2017-05-15 13:12:10 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2018-12-15 14:46:47 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								          it ( 'should support @Optional without matches' ,  ( )  = >  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            @Component ( { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								              template :  '' , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								              providers :  [ 
							 
						 
					
						
							
								
									
										
										
										
											2019-08-28 16:22:36 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                { provide : aTok ,  useValue :  'aValue' } , 
							 
						 
					
						
							
								
									
										
										
										
											2018-12-15 14:46:47 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								              ] 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            } ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            class  MyComp  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            } 
							 
						 
					
						
							
								
									
										
										
										
											2017-05-15 13:12:10 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2018-12-15 14:46:47 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            TestBed . overrideProvider ( 
							 
						 
					
						
							
								
									
										
										
										
											2019-08-28 16:22:36 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                aTok ,  { useFactory :  ( dep : any )  = >  ` mockA:  ${ dep } ` ,  deps :  [ [ new  Optional ( ) ,  'dep' ] ] } ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2018-12-15 14:46:47 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            const  ctx  = 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                TestBed . configureTestingModule ( { declarations :  [ MyComp ] } ) . createComponent ( MyComp ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2017-05-15 13:12:10 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2019-08-28 16:22:36 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            expect ( ctx . debugElement . injector . get ( aTok ) ) . toBe ( 'mockA: null' ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2018-12-15 14:46:47 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								          } ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2017-05-15 13:12:10 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2018-12-15 14:46:47 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								          it ( 'should support Optional with matches' ,  ( )  = >  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            @Component ( { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								              template :  '' , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								              providers :  [ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                { provide :  'dep' ,  useValue :  'depValue' } , 
							 
						 
					
						
							
								
									
										
										
										
											2019-08-28 16:22:36 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                { provide : aTok ,  useValue :  'aValue' } , 
							 
						 
					
						
							
								
									
										
										
										
											2018-12-15 14:46:47 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								              ] 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            } ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            class  MyComp  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            } 
							 
						 
					
						
							
								
									
										
										
										
											2017-05-15 13:12:10 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2018-12-15 14:46:47 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            TestBed . overrideProvider ( 
							 
						 
					
						
							
								
									
										
										
										
											2019-08-28 16:22:36 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                aTok ,  { useFactory :  ( dep : any )  = >  ` mockA:  ${ dep } ` ,  deps :  [ [ new  Optional ( ) ,  'dep' ] ] } ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2018-12-15 14:46:47 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            const  ctx  = 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                TestBed . configureTestingModule ( { declarations :  [ MyComp ] } ) . createComponent ( MyComp ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2017-05-15 13:12:10 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2019-08-28 16:22:36 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            expect ( ctx . debugElement . injector . get ( aTok ) ) . toBe ( 'mockA: depValue' ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2018-12-15 14:46:47 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								          } ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2017-05-15 13:12:10 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2018-12-15 14:46:47 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								          it ( 'should support SkipSelf' ,  ( )  = >  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            @Directive ( { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								              selector :  '[myDir]' , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								              providers :  [ 
							 
						 
					
						
							
								
									
										
										
										
											2019-08-28 16:22:36 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                { provide : aTok ,  useValue :  'aValue' } , 
							 
						 
					
						
							
								
									
										
										
										
											2018-12-15 14:46:47 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                { provide :  'dep' ,  useValue :  'depValue' } , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								              ] 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            } ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            class  MyDir  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            } 
							 
						 
					
						
							
								
									
										
										
										
											2017-05-15 13:12:10 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2018-12-15 14:46:47 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            @Component ( { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								              template :  '<div myDir></div>' , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								              providers :  [ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                { provide :  'dep' ,  useValue :  'parentDepValue' } , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								              ] 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            } ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            class  MyComp  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            } 
							 
						 
					
						
							
								
									
										
										
										
											2017-05-15 13:12:10 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2018-12-15 14:46:47 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            TestBed . overrideProvider ( 
							 
						 
					
						
							
								
									
										
										
										
											2019-08-28 16:22:36 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                aTok ,  { useFactory :  ( dep : any )  = >  ` mockA:  ${ dep } ` ,  deps :  [ [ new  SkipSelf ( ) ,  'dep' ] ] } ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2018-12-15 14:46:47 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            const  ctx  =  TestBed . configureTestingModule ( { declarations :  [ MyComp ,  MyDir ] } ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                            . createComponent ( MyComp ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2019-08-28 16:22:36 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            expect ( ctx . debugElement . children [ 0 ] . injector . get ( aTok ) ) . toBe ( 'mockA: parentDepValue' ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2018-12-15 14:46:47 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								          } ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2017-05-15 13:12:10 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2018-12-15 14:46:47 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								          it ( 'should support multiple providers in a template' ,  ( )  = >  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            @Directive ( { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								              selector :  '[myDir1]' , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								              providers :  [ 
							 
						 
					
						
							
								
									
										
										
										
											2019-08-28 16:22:36 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                { provide : aTok ,  useValue :  'aValue1' } , 
							 
						 
					
						
							
								
									
										
										
										
											2018-12-15 14:46:47 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								              ] 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            } ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            class  MyDir1  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            } 
							 
						 
					
						
							
								
									
										
										
										
											2017-05-15 13:12:10 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2018-12-15 14:46:47 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            @Directive ( { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								              selector :  '[myDir2]' , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								              providers :  [ 
							 
						 
					
						
							
								
									
										
										
										
											2019-08-28 16:22:36 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                { provide : aTok ,  useValue :  'aValue2' } , 
							 
						 
					
						
							
								
									
										
										
										
											2018-12-15 14:46:47 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								              ] 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            } ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            class  MyDir2  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            } 
							 
						 
					
						
							
								
									
										
										
										
											2017-05-15 13:12:10 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2018-12-15 14:46:47 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            @Component ( { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								              template :  '<div myDir1></div><div myDir2></div>' , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            } ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            class  MyComp  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            } 
							 
						 
					
						
							
								
									
										
										
										
											2017-05-15 13:12:10 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2019-08-28 16:22:36 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            TestBed . overrideProvider ( aTok ,  { useValue :  'mockA' } ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2018-12-15 14:46:47 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            const  ctx  =  TestBed . configureTestingModule ( { declarations :  [ MyComp ,  MyDir1 ,  MyDir2 ] } ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                            . createComponent ( MyComp ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2019-08-28 16:22:36 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            expect ( ctx . debugElement . children [ 0 ] . injector . get ( aTok ) ) . toBe ( 'mockA' ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            expect ( ctx . debugElement . children [ 1 ] . injector . get ( aTok ) ) . toBe ( 'mockA' ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2018-12-15 14:46:47 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								          } ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2017-05-15 13:12:10 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								          describe ( 'injecting eager providers into an eager overwritten provider' ,  ( )  = >  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            @Component ( { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								              template :  '' , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								              providers :  [ 
							 
						 
					
						
							
								
									
										
										
										
											2019-08-28 16:22:36 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                { provide : aTok ,  useFactory :  ( )  = >  'aValue' } , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                { provide : bTok ,  useFactory :  ( )  = >  'bValue' } , 
							 
						 
					
						
							
								
									
										
										
										
											2017-05-15 13:12:10 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								              ] 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            } ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            class  MyComp  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								              // Component is eager, which makes all of its deps eager
 
							 
						 
					
						
							
								
									
										
										
										
											2019-08-28 16:22:36 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								              constructor ( @Inject ( aTok )  a : any ,  @Inject ( bTok )  b : any )  { } 
							 
						 
					
						
							
								
									
										
										
										
											2017-05-15 13:12:10 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2018-12-15 14:46:47 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            it ( 'should inject providers that were declared before it' ,  ( )  = >  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								              TestBed . overrideProvider ( 
							 
						 
					
						
							
								
									
										
										
										
											2019-08-28 16:22:36 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                  bTok ,  { useFactory :  ( a : string )  = >  ` mockB:  ${ a } ` ,  deps :  [ aTok ] } ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2018-12-15 14:46:47 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								              const  ctx  = 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                  TestBed . configureTestingModule ( { declarations :  [ MyComp ] } ) . createComponent ( MyComp ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2018-12-04 15:13:10 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2019-08-28 16:22:36 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								              expect ( ctx . debugElement . injector . get ( bTok ) ) . toBe ( 'mockB: aValue' ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2018-12-15 14:46:47 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            } ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2018-12-04 15:13:10 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2018-12-15 14:46:47 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            it ( 'should inject providers that were declared after it' ,  ( )  = >  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								              TestBed . overrideProvider ( 
							 
						 
					
						
							
								
									
										
										
										
											2019-08-28 16:22:36 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                  aTok ,  { useFactory :  ( b : string )  = >  ` mockA:  ${ b } ` ,  deps :  [ bTok ] } ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2018-12-15 14:46:47 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								              const  ctx  = 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                  TestBed . configureTestingModule ( { declarations :  [ MyComp ] } ) . createComponent ( MyComp ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2018-12-04 15:13:10 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2019-08-28 16:22:36 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								              expect ( ctx . debugElement . injector . get ( aTok ) ) . toBe ( 'mockA: bValue' ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2018-12-15 14:46:47 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            } ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2018-12-04 17:51:34 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								          } ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2017-05-15 13:12:10 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        } ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        it ( 'should reset overrides when the testing modules is resetted' ,  ( )  = >  { 
							 
						 
					
						
							
								
									
										
										
										
											2019-08-28 16:22:36 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								          TestBed . overrideProvider ( aTok ,  { useValue :  'mockValue' } ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2017-05-15 13:12:10 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								          TestBed . resetTestingModule ( ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2019-08-28 16:22:36 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								          TestBed . configureTestingModule ( { providers :  [ { provide : aTok ,  useValue :  'aValue' } ] } ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								          expect ( TestBed . inject ( aTok ) ) . toBe ( 'aValue' ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2017-05-15 13:12:10 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        } ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      } ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2017-10-27 17:04:11 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								      describe ( 'overrideTemplateUsingTestingModule' ,  ( )  = >  { 
							 
						 
					
						
							
								
									
										
										
										
											2018-12-17 14:47:51 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        it ( 'should compile the template in the context of the testing module' ,  ( )  = >  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								          @Component ( { selector :  'comp' ,  template :  'a' } ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								          class  MyComponent  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            prop  =  'some prop' ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								          } 
							 
						 
					
						
							
								
									
										
										
										
											2017-10-27 17:04:11 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2018-12-17 14:47:51 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								          let  testDir : TestDir | undefined ; 
							 
						 
					
						
							
								
									
										
										
										
											2017-10-27 17:04:11 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2018-12-17 14:47:51 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								          @Directive ( { selector :  '[test]' } ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								          class  TestDir  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            constructor ( )  {  testDir  =  this ;  } 
							 
						 
					
						
							
								
									
										
										
										
											2017-10-27 17:04:11 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2018-12-17 14:47:51 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            // TODO(issue/24571): remove '!'.
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            @Input ( 'test' ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            test  ! :  string ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								          } 
							 
						 
					
						
							
								
									
										
										
										
											2017-10-27 17:04:11 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2018-12-17 14:47:51 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								          TestBed . overrideTemplateUsingTestingModule ( 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								              MyComponent ,  '<div [test]="prop">Hello world!</div>' ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2017-10-27 17:04:11 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2018-12-17 14:47:51 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								          const  fixture  =  TestBed . configureTestingModule ( { declarations :  [ MyComponent ,  TestDir ] } ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                              . createComponent ( MyComponent ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								          fixture . detectChanges ( ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								          expect ( fixture . nativeElement ) . toHaveText ( 'Hello world!' ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								          expect ( testDir ) . toBeAnInstanceOf ( TestDir ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								          expect ( testDir  ! . test ) . toBe ( 'some prop' ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        } ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2017-10-27 17:04:11 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2018-12-17 14:47:51 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        it ( 'should throw if the TestBed is already created' ,  ( )  = >  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								          @Component ( { selector :  'comp' ,  template :  'a' } ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								          class  MyComponent  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								          } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2019-08-28 16:22:36 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								          TestBed . inject ( Injector ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2018-12-17 14:47:51 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								          expect ( ( )  = >  TestBed . overrideTemplateUsingTestingModule ( MyComponent ,  'b' ) ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								              . toThrowError ( 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                  /Cannot override template when the test module has already been instantiated/ ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        } ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        it ( 'should reset overrides when the testing module is resetted' ,  ( )  = >  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								          @Component ( { selector :  'comp' ,  template :  'a' } ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								          class  MyComponent  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								          } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								          TestBed . overrideTemplateUsingTestingModule ( MyComponent ,  'b' ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								          const  fixture  =  TestBed . resetTestingModule ( ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                              . configureTestingModule ( { declarations :  [ MyComponent ] } ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                              . createComponent ( MyComponent ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								          expect ( fixture . nativeElement ) . toHaveText ( 'a' ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        } ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2017-10-27 17:04:11 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								      } ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-08-10 11:51:40 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								      describe ( 'setting up the compiler' ,  ( )  = >  { 
							 
						 
					
						
							
								
									
										
											 
										
											
												feat(testing): add implicit test module
Every test now has an implicit module. It can be configured via `configureModule` (from @angular/core/testing)
to add providers, directives, pipes, ...
The compiler now has to be configured separately via `configureCompiler` (from @angular/core/testing)
to add providers or define whether to use jit.
BREAKING CHANGE:
- Application providers can no longer inject compiler internals (i.e. everything
  from `@angular/compiler). Inject `Compiler` instead. This reflects the
  changes to `bootstrap` for module support (3f55aa609f60f130f1d69188ed057214b1267cb3).
- Compiler providers can no longer be added via `addProviders` / `withProviders`.
  Use the new method `configureCompiler` instead.
- Platform directives / pipes need to be provided via
  `configureModule` and can no longer be provided via the
  `PLATFORM_PIPES` / `PLATFORM_DIRECTIVES` tokens.
- `setBaseTestProviders()` was renamed into `initTestEnvironment` and 
  now takes a `PlatformRef` and a factory for a
  `Compiler`.
- E.g. for the browser platform:
  
  BEFORE:
  ```
  import {setBaseTestProviders} from ‘@angular/core/testing’;
  import {TEST_BROWSER_DYNAMIC_PLATFORM_PROVIDERS,
      TEST_BROWSER_DYNAMIC_APPLICATION_PROVIDERS} from ‘@angular/platform-browser-dynamic/testing’;
  
  setBaseTestProviders(TEST_BROWSER_DYNAMIC_PLATFORM_PROVIDERS,
      TEST_BROWSER_DYNAMIC_APPLICATION_PROVIDERS);   
  ```
  AFTER:
  ```
  import {setBaseTestProviders} from ‘@angular/core/testing’;
  import {browserTestCompiler, browserDynamicTestPlatform,
      BrowserDynamicTestModule} from ‘@angular/platform-browser-dynamic/testing’;
  
  initTestEnvironment(
      browserTestCompiler,
      browserDynamicTestPlatform(),
      BrowserDynamicTestModule);
  ```
- E.g. for the server platform:
  
  BEFORE:
  ```
  import {setBaseTestProviders} from ‘@angular/core/testing’;
  import {TEST_SERVER_PLATFORM_PROVIDERS,
      TEST_SERVER_APPLICATION_PROVIDERS} from ‘@angular/platform-server/testing/server’;
  
  setBaseTestProviders(TEST_SERVER_PLATFORM_PROVIDERS,
      TEST_SERVER_APPLICATION_PROVIDERS);   
  ```
  AFTER:
  ```
  import {setBaseTestProviders} from ‘@angular/core/testing’;
  import {serverTestCompiler, serverTestPlatform,
      ServerTestModule} from ‘@angular/platform-browser-dynamic/testing’;
  
  initTestEnvironment(
      serverTestCompiler,
      serverTestPlatform(),
      ServerTestModule);
  ```
Related to #9726
Closes #9846
											 
										 
										
											2016-07-04 09:37:30 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-08-10 11:51:40 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        describe ( 'providers' ,  ( )  = >  { 
							 
						 
					
						
							
								
									
										
											 
										
											
												feat(testing): add implicit test module
Every test now has an implicit module. It can be configured via `configureModule` (from @angular/core/testing)
to add providers, directives, pipes, ...
The compiler now has to be configured separately via `configureCompiler` (from @angular/core/testing)
to add providers or define whether to use jit.
BREAKING CHANGE:
- Application providers can no longer inject compiler internals (i.e. everything
  from `@angular/compiler). Inject `Compiler` instead. This reflects the
  changes to `bootstrap` for module support (3f55aa609f60f130f1d69188ed057214b1267cb3).
- Compiler providers can no longer be added via `addProviders` / `withProviders`.
  Use the new method `configureCompiler` instead.
- Platform directives / pipes need to be provided via
  `configureModule` and can no longer be provided via the
  `PLATFORM_PIPES` / `PLATFORM_DIRECTIVES` tokens.
- `setBaseTestProviders()` was renamed into `initTestEnvironment` and 
  now takes a `PlatformRef` and a factory for a
  `Compiler`.
- E.g. for the browser platform:
  
  BEFORE:
  ```
  import {setBaseTestProviders} from ‘@angular/core/testing’;
  import {TEST_BROWSER_DYNAMIC_PLATFORM_PROVIDERS,
      TEST_BROWSER_DYNAMIC_APPLICATION_PROVIDERS} from ‘@angular/platform-browser-dynamic/testing’;
  
  setBaseTestProviders(TEST_BROWSER_DYNAMIC_PLATFORM_PROVIDERS,
      TEST_BROWSER_DYNAMIC_APPLICATION_PROVIDERS);   
  ```
  AFTER:
  ```
  import {setBaseTestProviders} from ‘@angular/core/testing’;
  import {browserTestCompiler, browserDynamicTestPlatform,
      BrowserDynamicTestModule} from ‘@angular/platform-browser-dynamic/testing’;
  
  initTestEnvironment(
      browserTestCompiler,
      browserDynamicTestPlatform(),
      BrowserDynamicTestModule);
  ```
- E.g. for the server platform:
  
  BEFORE:
  ```
  import {setBaseTestProviders} from ‘@angular/core/testing’;
  import {TEST_SERVER_PLATFORM_PROVIDERS,
      TEST_SERVER_APPLICATION_PROVIDERS} from ‘@angular/platform-server/testing/server’;
  
  setBaseTestProviders(TEST_SERVER_PLATFORM_PROVIDERS,
      TEST_SERVER_APPLICATION_PROVIDERS);   
  ```
  AFTER:
  ```
  import {setBaseTestProviders} from ‘@angular/core/testing’;
  import {serverTestCompiler, serverTestPlatform,
      ServerTestModule} from ‘@angular/platform-browser-dynamic/testing’;
  
  initTestEnvironment(
      serverTestCompiler,
      serverTestPlatform(),
      ServerTestModule);
  ```
Related to #9726
Closes #9846
											 
										 
										
											2016-07-04 09:37:30 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2019-01-14 14:46:21 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								          it ( 'should use set up providers' ,  fakeAsync ( ( )  = >  { 
							 
						 
					
						
							
								
									
										
										
										
											2019-03-20 17:58:20 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								               // Keeping this component inside the test is needed to make sure it's not resolved
 
							 
						 
					
						
							
								
									
										
										
										
											2019-10-10 14:57:15 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								               // prior to this test, thus having ɵcmp and a reference in resource
 
							 
						 
					
						
							
								
									
										
										
										
											2019-03-20 17:58:20 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								               // resolution queue. This is done to check external resoution logic in isolation by
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								               // configuring TestBed with the necessary ResourceLoader instance.
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								               @Component ( { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                 selector :  'comp' , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                 templateUrl :  '/base/angular/packages/platform-browser/test/static_assets/test.html' 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								               } ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								               class  InternalCompWithUrlTemplate  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								               } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								               const  resourceLoaderGet  =  jasmine . createSpy ( 'resourceLoaderGet' ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                                             . and . returnValue ( Promise . resolve ( 'Hello world!' ) ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								               TestBed . configureTestingModule ( { declarations :  [ InternalCompWithUrlTemplate ] } ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								               TestBed . configureCompiler ( 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                   { providers :  [ { provide : ResourceLoader ,  useValue :  { get :  resourceLoaderGet } } ] } ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2019-01-14 14:46:21 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								               TestBed . compileComponents ( ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								               tick ( ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2019-03-20 17:58:20 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								               const  compFixture  =  TestBed . createComponent ( InternalCompWithUrlTemplate ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2019-01-14 14:46:21 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								               expect ( compFixture . nativeElement ) . toHaveText ( 'Hello world!' ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								             } ) ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2016-08-10 11:51:40 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        } ) ; 
							 
						 
					
						
							
								
									
										
											 
										
											
												feat(testing): add implicit test module
Every test now has an implicit module. It can be configured via `configureModule` (from @angular/core/testing)
to add providers, directives, pipes, ...
The compiler now has to be configured separately via `configureCompiler` (from @angular/core/testing)
to add providers or define whether to use jit.
BREAKING CHANGE:
- Application providers can no longer inject compiler internals (i.e. everything
  from `@angular/compiler). Inject `Compiler` instead. This reflects the
  changes to `bootstrap` for module support (3f55aa609f60f130f1d69188ed057214b1267cb3).
- Compiler providers can no longer be added via `addProviders` / `withProviders`.
  Use the new method `configureCompiler` instead.
- Platform directives / pipes need to be provided via
  `configureModule` and can no longer be provided via the
  `PLATFORM_PIPES` / `PLATFORM_DIRECTIVES` tokens.
- `setBaseTestProviders()` was renamed into `initTestEnvironment` and 
  now takes a `PlatformRef` and a factory for a
  `Compiler`.
- E.g. for the browser platform:
  
  BEFORE:
  ```
  import {setBaseTestProviders} from ‘@angular/core/testing’;
  import {TEST_BROWSER_DYNAMIC_PLATFORM_PROVIDERS,
      TEST_BROWSER_DYNAMIC_APPLICATION_PROVIDERS} from ‘@angular/platform-browser-dynamic/testing’;
  
  setBaseTestProviders(TEST_BROWSER_DYNAMIC_PLATFORM_PROVIDERS,
      TEST_BROWSER_DYNAMIC_APPLICATION_PROVIDERS);   
  ```
  AFTER:
  ```
  import {setBaseTestProviders} from ‘@angular/core/testing’;
  import {browserTestCompiler, browserDynamicTestPlatform,
      BrowserDynamicTestModule} from ‘@angular/platform-browser-dynamic/testing’;
  
  initTestEnvironment(
      browserTestCompiler,
      browserDynamicTestPlatform(),
      BrowserDynamicTestModule);
  ```
- E.g. for the server platform:
  
  BEFORE:
  ```
  import {setBaseTestProviders} from ‘@angular/core/testing’;
  import {TEST_SERVER_PLATFORM_PROVIDERS,
      TEST_SERVER_APPLICATION_PROVIDERS} from ‘@angular/platform-server/testing/server’;
  
  setBaseTestProviders(TEST_SERVER_PLATFORM_PROVIDERS,
      TEST_SERVER_APPLICATION_PROVIDERS);   
  ```
  AFTER:
  ```
  import {setBaseTestProviders} from ‘@angular/core/testing’;
  import {serverTestCompiler, serverTestPlatform,
      ServerTestModule} from ‘@angular/platform-browser-dynamic/testing’;
  
  initTestEnvironment(
      serverTestCompiler,
      serverTestPlatform(),
      ServerTestModule);
  ```
Related to #9726
Closes #9846
											 
										 
										
											2016-07-04 09:37:30 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-08-10 11:51:40 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        describe ( 'useJit true' ,  ( )  = >  { 
							 
						 
					
						
							
								
									
										
										
										
											2016-10-30 20:39:53 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								          beforeEach ( ( )  = >  TestBed . configureCompiler ( { useJit : true } ) ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2018-12-03 17:57:07 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								          obsoleteInIvy ( 'the Render3 compiler JiT mode is not configurable' ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								              . it ( 'should set the value into CompilerConfig' , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                  inject ( [ CompilerConfig ] ,  ( config : CompilerConfig )  = >  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                    expect ( config . useJit ) . toBe ( true ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                  } ) ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2016-08-10 11:51:40 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        } ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        describe ( 'useJit false' ,  ( )  = >  { 
							 
						 
					
						
							
								
									
										
										
										
											2016-10-30 20:39:53 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								          beforeEach ( ( )  = >  TestBed . configureCompiler ( { useJit : false } ) ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2018-12-03 17:57:07 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								          obsoleteInIvy ( 'the Render3 compiler JiT mode is not configurable' ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								              . it ( 'should set the value into CompilerConfig' , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                  inject ( [ CompilerConfig ] ,  ( config : CompilerConfig )  = >  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                    expect ( config . useJit ) . toBe ( false ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                  } ) ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2016-08-10 11:51:40 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        } ) ; 
							 
						 
					
						
							
								
									
										
											 
										
											
												feat(testing): add implicit test module
Every test now has an implicit module. It can be configured via `configureModule` (from @angular/core/testing)
to add providers, directives, pipes, ...
The compiler now has to be configured separately via `configureCompiler` (from @angular/core/testing)
to add providers or define whether to use jit.
BREAKING CHANGE:
- Application providers can no longer inject compiler internals (i.e. everything
  from `@angular/compiler). Inject `Compiler` instead. This reflects the
  changes to `bootstrap` for module support (3f55aa609f60f130f1d69188ed057214b1267cb3).
- Compiler providers can no longer be added via `addProviders` / `withProviders`.
  Use the new method `configureCompiler` instead.
- Platform directives / pipes need to be provided via
  `configureModule` and can no longer be provided via the
  `PLATFORM_PIPES` / `PLATFORM_DIRECTIVES` tokens.
- `setBaseTestProviders()` was renamed into `initTestEnvironment` and 
  now takes a `PlatformRef` and a factory for a
  `Compiler`.
- E.g. for the browser platform:
  
  BEFORE:
  ```
  import {setBaseTestProviders} from ‘@angular/core/testing’;
  import {TEST_BROWSER_DYNAMIC_PLATFORM_PROVIDERS,
      TEST_BROWSER_DYNAMIC_APPLICATION_PROVIDERS} from ‘@angular/platform-browser-dynamic/testing’;
  
  setBaseTestProviders(TEST_BROWSER_DYNAMIC_PLATFORM_PROVIDERS,
      TEST_BROWSER_DYNAMIC_APPLICATION_PROVIDERS);   
  ```
  AFTER:
  ```
  import {setBaseTestProviders} from ‘@angular/core/testing’;
  import {browserTestCompiler, browserDynamicTestPlatform,
      BrowserDynamicTestModule} from ‘@angular/platform-browser-dynamic/testing’;
  
  initTestEnvironment(
      browserTestCompiler,
      browserDynamicTestPlatform(),
      BrowserDynamicTestModule);
  ```
- E.g. for the server platform:
  
  BEFORE:
  ```
  import {setBaseTestProviders} from ‘@angular/core/testing’;
  import {TEST_SERVER_PLATFORM_PROVIDERS,
      TEST_SERVER_APPLICATION_PROVIDERS} from ‘@angular/platform-server/testing/server’;
  
  setBaseTestProviders(TEST_SERVER_PLATFORM_PROVIDERS,
      TEST_SERVER_APPLICATION_PROVIDERS);   
  ```
  AFTER:
  ```
  import {setBaseTestProviders} from ‘@angular/core/testing’;
  import {serverTestCompiler, serverTestPlatform,
      ServerTestModule} from ‘@angular/platform-browser-dynamic/testing’;
  
  initTestEnvironment(
      serverTestCompiler,
      serverTestPlatform(),
      ServerTestModule);
  ```
Related to #9726
Closes #9846
											 
										 
										
											2016-07-04 09:37:30 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								      } ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-08-10 11:51:40 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    describe ( 'errors' ,  ( )  = >  { 
							 
						 
					
						
							
								
									
										
										
										
											2016-10-30 20:39:53 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								      let  originalJasmineIt :  ( description : string ,  func :  ( )  = >  void )  = >  jasmine . Spec ; 
							 
						 
					
						
							
								
									
										
										
										
											2017-10-24 14:54:08 +03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								      let  originalJasmineBeforeEach :  ( beforeEachFunction :  ( done : DoneFn )  = >  void )  = >  void ; 
							 
						 
					
						
							
								
									
										
										
										
											2015-11-18 18:46:24 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-10-30 20:39:53 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								      const  patchJasmineIt  =  ( )  = >  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        let  resolve :  ( result : any )  = >  void ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        let  reject :  ( error : any )  = >  void ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        const  promise  =  new  Promise ( ( res ,  rej )  = >  { 
							 
						 
					
						
							
								
									
										
										
										
											2016-08-10 11:51:40 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								          resolve  =  res ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								          reject  =  rej ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        } ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        originalJasmineIt  =  jasmine . getEnv ( ) . it ; 
							 
						 
					
						
							
								
									
										
										
										
											2017-03-24 09:59:41 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        jasmine . getEnv ( ) . it  =  ( description : string ,  fn :  ( done : DoneFn )  = >  void ) :  any  = >  { 
							 
						 
					
						
							
								
									
										
										
										
											2016-10-30 20:39:53 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								          const  done  =  < DoneFn > ( ( )  = >  resolve ( null ) ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								          done . fail  =  ( err )  = >  reject ( err ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2016-08-10 11:51:40 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								          fn ( done ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								          return  null ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        } ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        return  promise ; 
							 
						 
					
						
							
								
									
										
										
										
											2015-11-18 18:46:24 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								      } ; 
							 
						 
					
						
							
								
									
										
										
										
											2015-10-08 15:33:17 -07:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-10-30 20:39:53 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								      const  restoreJasmineIt  =  ( )  = >  jasmine . getEnv ( ) . it  =  originalJasmineIt ; 
							 
						 
					
						
							
								
									
										
										
										
											2015-10-08 15:33:17 -07:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-10-30 20:39:53 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								      const  patchJasmineBeforeEach  =  ( )  = >  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        let  resolve :  ( result : any )  = >  void ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        let  reject :  ( error : any )  = >  void ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        const  promise  =  new  Promise ( ( res ,  rej )  = >  { 
							 
						 
					
						
							
								
									
										
										
										
											2016-08-10 11:51:40 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								          resolve  =  res ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								          reject  =  rej ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        } ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        originalJasmineBeforeEach  =  jasmine . getEnv ( ) . beforeEach ; 
							 
						 
					
						
							
								
									
										
										
										
											2016-10-30 20:39:53 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        jasmine . getEnv ( ) . beforeEach  =  ( fn :  ( done : DoneFn )  = >  void )  = >  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								          const  done  =  < DoneFn > ( ( )  = >  resolve ( null ) ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								          done . fail  =  ( err )  = >  reject ( err ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2016-08-10 11:51:40 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								          fn ( done ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        } ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        return  promise ; 
							 
						 
					
						
							
								
									
										
										
										
											2015-12-08 16:44:04 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								      } ; 
							 
						 
					
						
							
								
									
										
										
										
											2015-10-08 15:33:17 -07:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-10-30 20:39:53 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								      const  restoreJasmineBeforeEach  =  ( )  = >  jasmine . getEnv ( ) . beforeEach  = 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								          originalJasmineBeforeEach ; 
							 
						 
					
						
							
								
									
										
										
										
											2015-10-08 15:33:17 -07:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-10-30 20:39:53 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								      it ( 'should fail when an asynchronous error is thrown' ,  ( done )  = >  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        const  itPromise  =  patchJasmineIt ( ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        const  barError  =  new  Error ( 'bar' ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2015-11-18 18:46:24 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-08-10 11:51:40 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        it ( 'throws an async error' , 
							 
						 
					
						
							
								
									
										
										
										
											2016-10-30 20:39:53 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								           async ( inject ( [ ] ,  ( )  = >  setTimeout ( ( )  = >  {  throw  barError ;  } ,  0 ) ) ) ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        itPromise . then ( ( )  = >  done . fail ( 'Expected test to fail, but it did not' ) ,  ( err )  = >  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								          expect ( err ) . toEqual ( barError ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								          done ( ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        } ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2016-08-10 11:51:40 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        restoreJasmineIt ( ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      } ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2015-11-18 18:46:24 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-10-30 20:39:53 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								      it ( 'should fail when a returned promise is rejected' ,  ( done )  = >  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        const  itPromise  =  patchJasmineIt ( ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2015-10-08 15:33:17 -07:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-08-10 11:51:40 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        it ( 'should fail with an error from a promise' ,  async ( inject ( [ ] ,  ( )  = >  { 
							 
						 
					
						
							
								
									
										
										
										
											2017-03-24 09:59:41 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								             let  reject :  ( error : any )  = >  void  =  undefined  ! ; 
							 
						 
					
						
							
								
									
										
										
										
											2016-10-30 20:39:53 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								             const  promise  =  new  Promise ( ( _ ,  rej )  = >  reject  =  rej ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								             const  p  =  promise . then ( ( )  = >  expect ( 1 ) . toEqual ( 2 ) ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2015-10-08 15:33:17 -07:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-08-10 11:51:40 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								             reject ( 'baz' ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								             return  p ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								           } ) ) ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2015-10-08 15:33:17 -07:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-10-30 20:39:53 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        itPromise . then ( ( )  = >  done . fail ( 'Expected test to fail, but it did not' ) ,  ( err )  = >  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								          expect ( err . message ) . toEqual ( 'Uncaught (in promise): baz' ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								          done ( ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        } ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2016-08-10 11:51:40 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        restoreJasmineIt ( ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      } ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2015-10-08 15:33:17 -07:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-08-10 11:51:40 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								      describe ( 'components' ,  ( )  = >  { 
							 
						 
					
						
							
								
									
										
										
										
											2016-08-17 09:24:44 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        let  resourceLoaderGet : jasmine.Spy ; 
							 
						 
					
						
							
								
									
										
										
										
											2016-08-10 11:51:40 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        beforeEach ( ( )  = >  { 
							 
						 
					
						
							
								
									
										
										
										
											2016-08-17 09:24:44 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								          resourceLoaderGet  =  jasmine . createSpy ( 'resourceLoaderGet' ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                                  . and . returnValue ( Promise . resolve ( 'Hello world!' ) ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								          TestBed . configureCompiler ( 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								              { providers :  [ { provide : ResourceLoader ,  useValue :  { get :  resourceLoaderGet } } ] } ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2015-10-08 15:33:17 -07:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								        } ) ; 
							 
						 
					
						
							
								
									
										
											 
										
											
												feat(testing): add implicit test module
Every test now has an implicit module. It can be configured via `configureModule` (from @angular/core/testing)
to add providers, directives, pipes, ...
The compiler now has to be configured separately via `configureCompiler` (from @angular/core/testing)
to add providers or define whether to use jit.
BREAKING CHANGE:
- Application providers can no longer inject compiler internals (i.e. everything
  from `@angular/compiler). Inject `Compiler` instead. This reflects the
  changes to `bootstrap` for module support (3f55aa609f60f130f1d69188ed057214b1267cb3).
- Compiler providers can no longer be added via `addProviders` / `withProviders`.
  Use the new method `configureCompiler` instead.
- Platform directives / pipes need to be provided via
  `configureModule` and can no longer be provided via the
  `PLATFORM_PIPES` / `PLATFORM_DIRECTIVES` tokens.
- `setBaseTestProviders()` was renamed into `initTestEnvironment` and 
  now takes a `PlatformRef` and a factory for a
  `Compiler`.
- E.g. for the browser platform:
  
  BEFORE:
  ```
  import {setBaseTestProviders} from ‘@angular/core/testing’;
  import {TEST_BROWSER_DYNAMIC_PLATFORM_PROVIDERS,
      TEST_BROWSER_DYNAMIC_APPLICATION_PROVIDERS} from ‘@angular/platform-browser-dynamic/testing’;
  
  setBaseTestProviders(TEST_BROWSER_DYNAMIC_PLATFORM_PROVIDERS,
      TEST_BROWSER_DYNAMIC_APPLICATION_PROVIDERS);   
  ```
  AFTER:
  ```
  import {setBaseTestProviders} from ‘@angular/core/testing’;
  import {browserTestCompiler, browserDynamicTestPlatform,
      BrowserDynamicTestModule} from ‘@angular/platform-browser-dynamic/testing’;
  
  initTestEnvironment(
      browserTestCompiler,
      browserDynamicTestPlatform(),
      BrowserDynamicTestModule);
  ```
- E.g. for the server platform:
  
  BEFORE:
  ```
  import {setBaseTestProviders} from ‘@angular/core/testing’;
  import {TEST_SERVER_PLATFORM_PROVIDERS,
      TEST_SERVER_APPLICATION_PROVIDERS} from ‘@angular/platform-server/testing/server’;
  
  setBaseTestProviders(TEST_SERVER_PLATFORM_PROVIDERS,
      TEST_SERVER_APPLICATION_PROVIDERS);   
  ```
  AFTER:
  ```
  import {setBaseTestProviders} from ‘@angular/core/testing’;
  import {serverTestCompiler, serverTestPlatform,
      ServerTestModule} from ‘@angular/platform-browser-dynamic/testing’;
  
  initTestEnvironment(
      serverTestCompiler,
      serverTestPlatform(),
      ServerTestModule);
  ```
Related to #9726
Closes #9846
											 
										 
										
											2016-07-04 09:37:30 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2019-01-14 14:46:21 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        it ( 'should report an error for declared components with templateUrl which never call TestBed.compileComponents' , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								           ( )  = >  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								             const  itPromise  =  patchJasmineIt ( ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2019-03-11 10:35:25 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								             @Component ( { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								               selector :  'comp' , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								               templateUrl :  '/base/angular/packages/platform-browser/test/static_assets/test.html' 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								             } ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								             class  InlineCompWithUrlTemplate  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								             } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2019-01-14 14:46:21 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								             expect ( 
							 
						 
					
						
							
								
									
										
										
										
											2019-03-11 10:35:25 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                 ( )  = >  it ( 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                     'should fail' ,  withModule ( 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                                        { declarations :  [ InlineCompWithUrlTemplate ] } , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                                        ( )  = >  TestBed . createComponent ( InlineCompWithUrlTemplate ) ) ) ) 
							 
						 
					
						
							
								
									
										
										
										
											2019-01-14 14:46:21 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                 . toThrowError ( 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                     ivyEnabled  ? 
							 
						 
					
						
							
								
									
										
										
										
											2019-03-11 10:35:25 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                         ` Component 'InlineCompWithUrlTemplate' is not resolved:
 
							 
						 
					
						
							
								
									
										
										
										
											2019-01-14 14:46:21 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								 -  templateUrl :  / b a s e / a n g u l a r / p a c k a g e s / p l a t f o r m - b r o w s e r / t e s t / s t a t i c _ a s s e t s / t e s t . h t m l 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								Did  you  run  and  wait  for  'resolveComponentResources()' ? `  :
  
						 
					
						
							
								
									
										
										
										
											2019-03-11 10:35:25 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                         ` This test module uses the component  ${ stringify ( InlineCompWithUrlTemplate ) }  which is using a "templateUrl" or "styleUrls", but they were never compiled.  `  + 
							 
						 
					
						
							
								
									
										
										
										
											2019-01-14 14:46:21 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                             ` Please call "TestBed.compileComponents" before your test. ` ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								             restoreJasmineIt ( ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								           } ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2016-08-10 11:51:40 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
											 
										
											
												feat(testing): add implicit test module
Every test now has an implicit module. It can be configured via `configureModule` (from @angular/core/testing)
to add providers, directives, pipes, ...
The compiler now has to be configured separately via `configureCompiler` (from @angular/core/testing)
to add providers or define whether to use jit.
BREAKING CHANGE:
- Application providers can no longer inject compiler internals (i.e. everything
  from `@angular/compiler). Inject `Compiler` instead. This reflects the
  changes to `bootstrap` for module support (3f55aa609f60f130f1d69188ed057214b1267cb3).
- Compiler providers can no longer be added via `addProviders` / `withProviders`.
  Use the new method `configureCompiler` instead.
- Platform directives / pipes need to be provided via
  `configureModule` and can no longer be provided via the
  `PLATFORM_PIPES` / `PLATFORM_DIRECTIVES` tokens.
- `setBaseTestProviders()` was renamed into `initTestEnvironment` and 
  now takes a `PlatformRef` and a factory for a
  `Compiler`.
- E.g. for the browser platform:
  
  BEFORE:
  ```
  import {setBaseTestProviders} from ‘@angular/core/testing’;
  import {TEST_BROWSER_DYNAMIC_PLATFORM_PROVIDERS,
      TEST_BROWSER_DYNAMIC_APPLICATION_PROVIDERS} from ‘@angular/platform-browser-dynamic/testing’;
  
  setBaseTestProviders(TEST_BROWSER_DYNAMIC_PLATFORM_PROVIDERS,
      TEST_BROWSER_DYNAMIC_APPLICATION_PROVIDERS);   
  ```
  AFTER:
  ```
  import {setBaseTestProviders} from ‘@angular/core/testing’;
  import {browserTestCompiler, browserDynamicTestPlatform,
      BrowserDynamicTestModule} from ‘@angular/platform-browser-dynamic/testing’;
  
  initTestEnvironment(
      browserTestCompiler,
      browserDynamicTestPlatform(),
      BrowserDynamicTestModule);
  ```
- E.g. for the server platform:
  
  BEFORE:
  ```
  import {setBaseTestProviders} from ‘@angular/core/testing’;
  import {TEST_SERVER_PLATFORM_PROVIDERS,
      TEST_SERVER_APPLICATION_PROVIDERS} from ‘@angular/platform-server/testing/server’;
  
  setBaseTestProviders(TEST_SERVER_PLATFORM_PROVIDERS,
      TEST_SERVER_APPLICATION_PROVIDERS);   
  ```
  AFTER:
  ```
  import {setBaseTestProviders} from ‘@angular/core/testing’;
  import {serverTestCompiler, serverTestPlatform,
      ServerTestModule} from ‘@angular/platform-browser-dynamic/testing’;
  
  initTestEnvironment(
      serverTestCompiler,
      serverTestPlatform(),
      ServerTestModule);
  ```
Related to #9726
Closes #9846
											 
										 
										
											2016-07-04 09:37:30 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								      } ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2018-12-04 17:51:34 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2020-03-03 14:58:53 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								      modifiedInIvy ( ` Unknown property error thrown instead of logging a warning ` ) 
							 
						 
					
						
							
								
									
										
										
										
											2018-12-03 17:57:07 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								          . it ( 'should error on unknown bound properties on custom elements by default' ,  ( )  = >  { 
							 
						 
					
						
							
								
									
										
										
										
											2018-12-04 15:13:10 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            @Component ( { template :  '<some-element [someUnknownProp]="true"></some-element>' } ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            class  ComponentUsingInvalidProperty  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            } 
							 
						 
					
						
							
								
									
										
										
										
											2016-07-20 10:51:21 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2018-12-04 15:13:10 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            const  itPromise  =  patchJasmineIt ( ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2016-07-20 10:51:21 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2018-12-04 15:13:10 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            expect ( 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                ( )  = > 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                    it ( 'should fail' , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                       withModule ( 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                           { declarations :  [ ComponentUsingInvalidProperty ] } , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                           ( )  = >  TestBed . createComponent ( ComponentUsingInvalidProperty ) ) ) ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                . toThrowError ( /Can't bind to 'someUnknownProp'/ ) ; 
							 
						 
					
						
							
								
									
										
											 
										
											
												feat(testing): add implicit test module
Every test now has an implicit module. It can be configured via `configureModule` (from @angular/core/testing)
to add providers, directives, pipes, ...
The compiler now has to be configured separately via `configureCompiler` (from @angular/core/testing)
to add providers or define whether to use jit.
BREAKING CHANGE:
- Application providers can no longer inject compiler internals (i.e. everything
  from `@angular/compiler). Inject `Compiler` instead. This reflects the
  changes to `bootstrap` for module support (3f55aa609f60f130f1d69188ed057214b1267cb3).
- Compiler providers can no longer be added via `addProviders` / `withProviders`.
  Use the new method `configureCompiler` instead.
- Platform directives / pipes need to be provided via
  `configureModule` and can no longer be provided via the
  `PLATFORM_PIPES` / `PLATFORM_DIRECTIVES` tokens.
- `setBaseTestProviders()` was renamed into `initTestEnvironment` and 
  now takes a `PlatformRef` and a factory for a
  `Compiler`.
- E.g. for the browser platform:
  
  BEFORE:
  ```
  import {setBaseTestProviders} from ‘@angular/core/testing’;
  import {TEST_BROWSER_DYNAMIC_PLATFORM_PROVIDERS,
      TEST_BROWSER_DYNAMIC_APPLICATION_PROVIDERS} from ‘@angular/platform-browser-dynamic/testing’;
  
  setBaseTestProviders(TEST_BROWSER_DYNAMIC_PLATFORM_PROVIDERS,
      TEST_BROWSER_DYNAMIC_APPLICATION_PROVIDERS);   
  ```
  AFTER:
  ```
  import {setBaseTestProviders} from ‘@angular/core/testing’;
  import {browserTestCompiler, browserDynamicTestPlatform,
      BrowserDynamicTestModule} from ‘@angular/platform-browser-dynamic/testing’;
  
  initTestEnvironment(
      browserTestCompiler,
      browserDynamicTestPlatform(),
      BrowserDynamicTestModule);
  ```
- E.g. for the server platform:
  
  BEFORE:
  ```
  import {setBaseTestProviders} from ‘@angular/core/testing’;
  import {TEST_SERVER_PLATFORM_PROVIDERS,
      TEST_SERVER_APPLICATION_PROVIDERS} from ‘@angular/platform-server/testing/server’;
  
  setBaseTestProviders(TEST_SERVER_PLATFORM_PROVIDERS,
      TEST_SERVER_APPLICATION_PROVIDERS);   
  ```
  AFTER:
  ```
  import {setBaseTestProviders} from ‘@angular/core/testing’;
  import {serverTestCompiler, serverTestPlatform,
      ServerTestModule} from ‘@angular/platform-browser-dynamic/testing’;
  
  initTestEnvironment(
      serverTestCompiler,
      serverTestPlatform(),
      ServerTestModule);
  ```
Related to #9726
Closes #9846
											 
										 
										
											2016-07-04 09:37:30 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2018-12-04 15:13:10 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            restoreJasmineIt ( ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								          } ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2019-02-07 14:29:28 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2020-03-03 14:58:53 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								      onlyInIvy ( ` Unknown property warning logged instead of an error ` ) 
							 
						 
					
						
							
								
									
										
										
										
											2019-02-07 14:29:28 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								          . it ( 'should error on unknown bound properties on custom elements by default' ,  ( )  = >  { 
							 
						 
					
						
							
								
									
										
										
										
											2019-10-26 12:44:03 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            @Component ( { template :  '<div [someUnknownProp]="true"></div>' } ) 
							 
						 
					
						
							
								
									
										
										
										
											2019-02-07 14:29:28 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            class  ComponentUsingInvalidProperty  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2020-03-03 14:58:53 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            const  spy  =  spyOn ( console ,  'warn' ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2019-09-04 21:48:04 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            withModule ( { declarations :  [ ComponentUsingInvalidProperty ] } ,  ( )  = >  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								              const  fixture  =  TestBed . createComponent ( ComponentUsingInvalidProperty ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								              fixture . detectChanges ( ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            } ) ( ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            expect ( spy . calls . mostRecent ( ) . args [ 0 ] ) . toMatch ( /Can't bind to 'someUnknownProp'/ ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2019-02-07 14:29:28 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								          } ) ; 
							 
						 
					
						
							
								
									
										
											 
										
											
												feat(testing): add implicit test module
Every test now has an implicit module. It can be configured via `configureModule` (from @angular/core/testing)
to add providers, directives, pipes, ...
The compiler now has to be configured separately via `configureCompiler` (from @angular/core/testing)
to add providers or define whether to use jit.
BREAKING CHANGE:
- Application providers can no longer inject compiler internals (i.e. everything
  from `@angular/compiler). Inject `Compiler` instead. This reflects the
  changes to `bootstrap` for module support (3f55aa609f60f130f1d69188ed057214b1267cb3).
- Compiler providers can no longer be added via `addProviders` / `withProviders`.
  Use the new method `configureCompiler` instead.
- Platform directives / pipes need to be provided via
  `configureModule` and can no longer be provided via the
  `PLATFORM_PIPES` / `PLATFORM_DIRECTIVES` tokens.
- `setBaseTestProviders()` was renamed into `initTestEnvironment` and 
  now takes a `PlatformRef` and a factory for a
  `Compiler`.
- E.g. for the browser platform:
  
  BEFORE:
  ```
  import {setBaseTestProviders} from ‘@angular/core/testing’;
  import {TEST_BROWSER_DYNAMIC_PLATFORM_PROVIDERS,
      TEST_BROWSER_DYNAMIC_APPLICATION_PROVIDERS} from ‘@angular/platform-browser-dynamic/testing’;
  
  setBaseTestProviders(TEST_BROWSER_DYNAMIC_PLATFORM_PROVIDERS,
      TEST_BROWSER_DYNAMIC_APPLICATION_PROVIDERS);   
  ```
  AFTER:
  ```
  import {setBaseTestProviders} from ‘@angular/core/testing’;
  import {browserTestCompiler, browserDynamicTestPlatform,
      BrowserDynamicTestModule} from ‘@angular/platform-browser-dynamic/testing’;
  
  initTestEnvironment(
      browserTestCompiler,
      browserDynamicTestPlatform(),
      BrowserDynamicTestModule);
  ```
- E.g. for the server platform:
  
  BEFORE:
  ```
  import {setBaseTestProviders} from ‘@angular/core/testing’;
  import {TEST_SERVER_PLATFORM_PROVIDERS,
      TEST_SERVER_APPLICATION_PROVIDERS} from ‘@angular/platform-server/testing/server’;
  
  setBaseTestProviders(TEST_SERVER_PLATFORM_PROVIDERS,
      TEST_SERVER_APPLICATION_PROVIDERS);   
  ```
  AFTER:
  ```
  import {setBaseTestProviders} from ‘@angular/core/testing’;
  import {serverTestCompiler, serverTestPlatform,
      ServerTestModule} from ‘@angular/platform-browser-dynamic/testing’;
  
  initTestEnvironment(
      serverTestCompiler,
      serverTestPlatform(),
      ServerTestModule);
  ```
Related to #9726
Closes #9846
											 
										 
										
											2016-07-04 09:37:30 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    } ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2016-07-28 04:54:49 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-10-30 20:39:53 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    describe ( 'creating components' ,  ( )  = >  { 
							 
						 
					
						
							
								
									
										
										
										
											2016-07-28 04:54:49 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-08-10 11:51:40 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								      beforeEach ( ( )  = >  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        TestBed . configureTestingModule ( { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								          declarations :  [ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            ChildComp , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            MyIfComp , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            ChildChildComp , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            ParentComp , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            TestProvidersComp , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            TestViewProvidersComp , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								          ] 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        } ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      } ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2015-10-08 15:33:17 -07:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-08-10 11:51:40 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								      it ( 'should instantiate a component with valid DOM' ,  async ( ( )  = >  { 
							 
						 
					
						
							
								
									
										
										
										
											2016-10-30 20:39:53 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								           const  fixture  =  TestBed . createComponent ( ChildComp ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2016-08-10 11:51:40 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								           fixture . detectChanges ( ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2015-10-08 15:33:17 -07:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-09-09 12:04:38 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								           expect ( fixture . nativeElement ) . toHaveText ( 'Original Child' ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2016-08-10 11:51:40 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								         } ) ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2015-10-08 15:33:17 -07:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-08-10 11:51:40 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								      it ( 'should allow changing members of the component' ,  async ( ( )  = >  { 
							 
						 
					
						
							
								
									
										
										
										
											2016-10-30 20:39:53 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								           const  componentFixture  =  TestBed . createComponent ( MyIfComp ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2015-10-31 09:50:19 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								           componentFixture . detectChanges ( ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2016-09-09 12:04:38 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								           expect ( componentFixture . nativeElement ) . toHaveText ( 'MyIf()' ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2015-10-08 15:33:17 -07:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-09-09 12:04:38 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								           componentFixture . componentInstance . showMore  =  true ; 
							 
						 
					
						
							
								
									
										
										
										
											2015-10-31 09:50:19 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								           componentFixture . detectChanges ( ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2016-09-09 12:04:38 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								           expect ( componentFixture . nativeElement ) . toHaveText ( 'MyIf(More)' ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2016-08-10 11:51:40 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								         } ) ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2015-10-08 15:33:17 -07:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-08-10 11:51:40 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								      it ( 'should override a template' ,  async ( ( )  = >  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								           TestBed . overrideComponent ( ChildComp ,  { set :  { template :  '<span>Mock</span>' } } ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2016-11-12 14:08:58 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								           const  componentFixture  =  TestBed . createComponent ( ChildComp ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2016-08-10 11:51:40 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								           componentFixture . detectChanges ( ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2016-09-09 12:04:38 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								           expect ( componentFixture . nativeElement ) . toHaveText ( 'Mock' ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2015-10-08 15:33:17 -07:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-08-10 11:51:40 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								         } ) ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2015-10-08 15:33:17 -07:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-08-10 11:51:40 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								      it ( 'should override a provider' ,  async ( ( )  = >  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								           TestBed . overrideComponent ( 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								               TestProvidersComp , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								               { set :  { providers :  [ { provide : FancyService ,  useClass : MockFancyService } ] } } ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2016-10-30 20:39:53 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								           const  componentFixture  =  TestBed . createComponent ( TestProvidersComp ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2016-08-10 11:51:40 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								           componentFixture . detectChanges ( ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2016-09-09 12:04:38 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								           expect ( componentFixture . nativeElement ) . toHaveText ( 'injected value: mocked out value' ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2016-08-10 11:51:40 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								         } ) ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2015-10-08 15:33:17 -07:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-08-10 11:51:40 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								      it ( 'should override a viewProvider' ,  async ( ( )  = >  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								           TestBed . overrideComponent ( 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								               TestViewProvidersComp , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								               { set :  { viewProviders :  [ { provide : FancyService ,  useClass : MockFancyService } ] } } ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2015-10-08 15:33:17 -07:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-10-30 20:39:53 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								           const  componentFixture  =  TestBed . createComponent ( TestViewProvidersComp ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2016-08-10 11:51:40 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								           componentFixture . detectChanges ( ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2016-09-09 12:04:38 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								           expect ( componentFixture . nativeElement ) . toHaveText ( 'injected value: mocked out value' ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2016-08-10 11:51:40 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								         } ) ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    describe ( 'using alternate components' ,  ( )  = >  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      beforeEach ( ( )  = >  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        TestBed . configureTestingModule ( { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								          declarations :  [ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            MockChildComp , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            ParentComp , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								          ] 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        } ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      } ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2015-10-08 15:33:17 -07:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-08-10 11:51:40 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								      it ( 'should override component dependencies' ,  async ( ( )  = >  { 
							 
						 
					
						
							
								
									
										
										
										
											2016-11-12 14:08:58 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								           const  componentFixture  =  TestBed . createComponent ( ParentComp ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2016-08-10 11:51:40 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								           componentFixture . detectChanges ( ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2016-09-09 12:04:38 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								           expect ( componentFixture . nativeElement ) . toHaveText ( 'Parent(Mock)' ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2016-08-10 11:51:40 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								         } ) ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2015-10-08 15:33:17 -07:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								  } ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								}