| FazBrowse GitHub Viewer | Trending | | Home |
| Tools: [Download Repo ZIP] [Original HTTPS Page] |
| Name | Name | Last commit date | ||
|---|---|---|---|---|
parent directory.. | ||||
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 via pnpm build, then install the distribution into each app.
To test Angular CLI applications, we use the cli-hello-world-* integration tests. When a significant change is released in the CLI, the applications should be updated with ng update:
$ cd integration/cli-hello-world[-*]
$ pnpm install
$ pnpm ng update @angular/cli @angular-devkit/build-angular
$ pnpm build
$ pnpm testAfterwards the @angular/cli and @angular-devkit/build-angular should be reverted to the file:../ urls and the main package.json should be updated with the new versions.
The directory cli-hello-world-ivy-compat contains a test for render3 used with the angular cli.
The cli-hello-world-ivy-minimal contains a minimal ivy app that is meant to mimic the bazel equivalent in packages/core/test/bundling/hello_world, and should be kept similar.
The API for each test is:
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-locked) dependencies. If in doubt, you can install the package directly from file:../../node_modules.
WARNING
Always ensure that yarn.lock files are up-to-date with the corresponding package.json files (wrt the non-local dependencies - i.e. dependencies whose versions do not start with file:).
You can update a yarn.lock file by running pnpm install in the project subdirectory.
$ ./integration/run_tests.sh
The test runner will first re-build any stale npm packages, then cd into each subdirectory to execute the test.
The PR #33927 added the ability to run integration tests with Bazel. These tests can be resource intensive so it is recommended to limit the number of concurrent test jobs with the --local_test_jobs bazel flag.
Locally, if Bazel uses all of your cores to run the maximum number of integration tests in parallel then this can lead to test timeouts and flakes and freeze up your machine while these tests are running. You can limit the number of concurrent local integration tests that run with:
pnpm bazel test --local_test_jobs=<N> //integration/...
Set a reasonable local_test_jobs limit for your local machine to prevent full cpu utilization during local development test runs.
To avoid having to specify this command line flag, you may want to include it in your .bazelrc.user file:
test --local_test_jobs=<N>
The downside of this is that this will apply to all tests and not just the resource intensive integration tests.
Two of the integration tests that run Bazel-in-Bazel are particularly resource intensive and are tagged "manual" and "exclusive". To run these tests use,
pnpm bazel test //integration/bazel:test pnpm bazel test //integration/cli-hello-world-ivy-minimal:test
When adding a new integration test, follow the steps below to add a bazel test target for the new test.
Some integration ports must be managed manually to be unique and in other cases the tests are able to select a random free port.
Where ng e2e is used we pass ng e2e --port 0 which prompts the cli to select a random free port for the e2e test. The protractor.conf is automatically updated to use this port.
Karma automatically finds a free port so no effort is needed there.
The manually configured ports are as follows:
| TEST | PORT | CONFIGURATION |
|---|---|---|
| dynamic-compiler | 4201 | /e2e/browser.config.json: "port": 4201 |
| ng_elements | 4205 | /e2e/browser.config.json: "port": 4205 |
| platform-server | 4206 | /src/server.ts: app.listen(4206,... |
Note: This will become obsolete soon once we start running integration tests with RBE and within a sandbox environment.
For integration tests we use the Bazel-managed versions of chromium. For both Karma and Protractor tests we set a number of browser testing flags. To avoid duplication, they will be listed and explained here and the code will reference this file for more information.
The sandbox needs to be disabled with the --no-sandbox flag for both Karma and Protractor tests, because it causes Chrome to crash on some environments.
See: https://chromedriver.chromium.org/help/chrome-doesn-t-start See: https://github.com/puppeteer/puppeteer/blob/v1.0.0/docs/troubleshooting.md#chrome-headless-fails-due-to-sandbox-issues
So that browsers are not popping up and tearing down when running these tests we run Chrome in headless mode. The --headless flag puts Chrome in headless mode and a number of other flags are recommended in this mode as well:
These come from the flags that puppeteer passes to chrome when it launches it in headless mode: https://github.com/puppeteer/puppeteer/blob/18f2ecdffdfc70e891750b570bfe8bea5b5ca8c2/lib/Launcher.js#L91
And from the flags that the Karma ChromeHeadless browser passes to Chrome: https://github.com/karma-runner/karma-chrome-launcher/blob/5f70a76de87ecbb57f3f3cb556aa6a2a1a4f643f/index.js#L171
The --disable-dev-shm-usage flag disables the usage of /dev/shm because it causes Chrome to crash on some environments.
On CI, the puppeteer provisioned Chrome crashes with CI we get Root cause: org.openqa.selenium.WebDriverException: unknown error: DevToolsActivePort file doesn't exist which resolves without this flag.
See: https://github.com/puppeteer/puppeteer/blob/v1.0.0/docs/troubleshooting.md#tips See: https://stackoverflow.com/questions/50642308/webdriverexception-unknown-error-devtoolsactiveport-file-doesnt-exist-while-t
If size regression occurs, one way to debug is to get a build which shows the code before and after. Here are the steps to do that.
| Back | FazBrowse Home | New Git URL |