55 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
		
		
			
		
	
	
			55 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
|  | # Integration tests for Angular
 | ||
|  | 
 | ||
|  | 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. | ||
|  | 
 | ||
|  | ## 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. | ||
|  | 
 | ||
|  | Also, beware of floating (non-shrinkwrapped) dependencies. If in doubt | ||
|  | you can install the package directly from `file:../../node_modules`. For example, | ||
|  | this is useful for protractor, which has a slow post-install step | ||
|  | (`webdriver-manager update`) that can be skipped when the package from | ||
|  | Angular's `node_modules` is installed. | ||
|  | 
 | ||
|  | ## Running integration tests
 | ||
|  | 
 | ||
|  | The first time you run the tests, you'll need some setup: | ||
|  | 
 | ||
|  | ```shell | ||
|  | $ EXPERIMENTAL_ES2015_DISTRO=1 ./build.sh | ||
|  | $ ./integration/build_rxjs_es6.sh | ||
|  | ``` | ||
|  | 
 | ||
|  | Now you can iterate on the tests by keeping the dist folder up-to-date. | ||
|  | See the `package.json` of the test(s) you're debugging, to see which dist/ folders they install from. | ||
|  | Then run the right `tsc --watch` command to keep those dist folders up-to-date, for example: | ||
|  | 
 | ||
|  | ``` | ||
|  | $ ./node_modules/.bin/tsc -p modules/@angular/core/tsconfig-build.json --target es2015 --outDir dist/packages-dist-es2015/core --watch | ||
|  | ``` | ||
|  | 
 | ||
|  | Now you can run the integration test, it will re-install from the dist/ folder on each run. | ||
|  | 
 | ||
|  | ``` | ||
|  | $ ./integration/run_tests.sh | ||
|  | ``` |