angular-cn/integration
Tobias Bosch edd5f5a333 perf(compiler): make the creation of `ts.Program` faster. (#19275)
We now create 2 programs with exactly the same fileNames and
exactly the same `import` / `export` declarations,
allowing TS to reuse the structure of first program
completely. When passing in an oldProgram and the files didn’t change,
TS can also reuse the old program completely.

This is possible buy adding generated files to TS
in `host.geSourceFile` via `ts.SourceFile.referencedFiles`.

This commit also:
- has a minor side effect on how we generate shared stylesheets:
  - previously every import in a stylesheet would generate a new
    `.ngstyles.ts` file.
  - now, we only generate 1 `.ngstyles.ts` file per entry in `@Component.styleUrls`.
  This was required as we need to be able to determine the program files
  without loading the resources (which can be async).
- makes all angular related methods in `CompilerHost`
  optional, allowing to just use a regular `ts.CompilerHost` as `CompilerHost`.
- simplifies the logic around `Compiler.analyzeNgModules` by introducing `NgAnalyzedFile`.

Perf impact: 1.5s improvement in compiling angular io
PR Close #19275
2017-09-19 16:55:23 -07:00
..
bazel refactor: update angular to support TypeScript 2.4 2017-09-12 10:31:30 -07:00
hello_world__closure refactor: update angular to support TypeScript 2.4 2017-09-12 10:31:30 -07:00
hello_world__systemjs_umd refactor: update angular to support TypeScript 2.4 2017-09-12 10:31:30 -07:00
i18n refactor: update angular to support TypeScript 2.4 2017-09-12 10:31:30 -07:00
language_service_plugin refactor: update angular to support TypeScript 2.4 2017-09-12 10:31:30 -07:00
typings_test_ts24 refactor: update angular to support TypeScript 2.4 2017-09-12 10:31:30 -07:00
.gitignore test: add cli integration test (#18738) 2017-08-16 22:00:36 -05:00
README.md test: cleanup rxjs custom build 2017-05-04 15:07:27 -04:00
_payload-limits.sh build(core): reduce payload size for cli-hello-world (#19159) 2017-09-13 13:53:28 -04:00
ng-cli-create.sh perf(compiler): make the creation of `ts.Program` faster. (#19275) 2017-09-19 16:55:23 -07:00
run_tests.sh build: fix build by pinning angular-cli to specific version (#18865) 2017-08-24 09:34:43 -07:00

README.md

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

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 packages/core/tsconfig-build.json --watch

Now you can run the integration test, it will re-install from the dist/ folder on each run.

$ ./integration/run_tests.sh