2017-02-09 09:06:19 -08:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								# Integration tests for Angular
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2018-01-16 07:09:59 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								This directory contains end-to-end tests for Angular. Each directory is a self-contained application that exactly mimics how a user might expect Angular
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								to work, so they allow high-fidelity reproductions of real-world issues.
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								For this to work, we first build the Angular distribution just like we would
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								publish it to npm, then install the distribution into each app.
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2018-04-24 20:30:23 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								To test Angular CLI applications, we use the integration test `cli-hello-world` .
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								When a significant change is released in the CLI, the application should be updated with `ng update` :
							 
						 
					
						
							
								
									
										
										
										
											2018-01-16 07:09:59 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								```bash
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								$ cd integration
							 
						 
					
						
							
								
									
										
										
										
											2018-04-24 20:30:23 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								$ ng update
							 
						 
					
						
							
								
									
										
										
										
											2018-01-16 07:09:59 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								# ng build
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								# ng test
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								# typescript version
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								```
							 
						 
					
						
							
								
									
										
										
										
											2017-02-09 09:06:19 -08:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2018-01-25 16:43:29 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								## Render3 tests
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								The directory `hello_world_cli`  contains a test for render3 used with the angular cli.
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								If the Angular CLI is modified to generate a render3 application this should be replaced with that project.
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								If the render3 is updated to support the Angular 5 bootstrap a version of this project should be created that
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								uses the Angular 5 bootstrap.
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2017-02-09 09:06:19 -08:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								## Writing an integration test
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								The API for each test is:
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								-  Each sub-directory here is an integration test 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								-  Each test should have a `package.json`  file 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								-  The test runner will run `yarn`  and `yarn test`  on the package 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								This means that the test should be started by test script, like
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								```
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								'scripts' { 'test': 'runProgramA & &  assertResultIsGood' }
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								```
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								Note that the `package.json`  file uses a special `file://../../dist`  scheme
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								to reference the Angular packages, so that the locally-built Angular
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								is installed into the test app.
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2017-09-21 15:39:43 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								Also, beware of floating (non-locked) dependencies. If in doubt
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								you can install the package directly from `file:../../node_modules` .
							 
						 
					
						
							
								
									
										
										
										
											2017-02-09 09:06:19 -08:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								## Running integration tests
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								```
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								$ ./integration/run_tests.sh
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								```
							 
						 
					
						
							
								
									
										
										
										
											2018-03-15 15:36:11 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								The test runner will first re-build any stale npm packages, then `cd`  into each
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								subdirectory to execute the test.