angular/integration/platform-server
Alan Agius 45a6ac09fd fix(http): force macro task creation during HTTP request (#49546)
This commit adds a background macrotask when an XHR request is performed. The macrotask is started during `loadstart` and ended during `loadend` event.

The macrotask is needed so that the application is not stabilized during HTTP calls. This is important for server rendering, as the application is rendering when the application is stabilized.
The application is stabilized when there are no longer pending Macro and Micro tasks intercepted by Zone.js, Since an XHR request is none of these, we create a background macrotask so that Zone.js is
made aware that there is something pending.

Prior to this change, we patched the `HttpHandler` in `@angular/platform-server` but this is not enough, as there can be multiple `HttpHandler` in an application, example when importing `HttpClient` in a lazy loaded component/module.
Which causes a new unpatched instance of `HttpHandler` to be created in the child injector which is not intercepted by Zone.js and thus the application is stabalized and rendered before the XHR request is finalized.

NB: Zone.js is fundamental for SSR and currently, it's not possible to do SSR without it.

Closes: #49425

PR Close #49546
2023-03-29 09:13:41 -07:00
..
e2e fix(http): force macro task creation during HTTP request (#49546) 2023-03-29 09:13:41 -07:00
src fix(http): force macro task creation during HTTP request (#49546) 2023-03-29 09:13:41 -07:00
base-config.mjs test: re-enable platform-server integration test (#44055) 2021-11-04 18:57:22 +00:00
BUILD.bazel build: setup test targets for integration tests with new rule (#44238) 2021-12-08 13:42:41 -05:00
build.sh test: run platform-server integration test with v13 partial compilation packages (#43431) 2021-10-01 18:28:44 +00:00
package.json fix(http): force macro task creation during HTTP request (#49546) 2023-03-29 09:13:41 -07:00
README.md test: move platform-server integration test (#22810) 2018-04-13 16:30:50 -07:00
tsconfig.json refactor(dev-infra): remove obsolete todos (#49362) 2023-03-08 15:39:55 -08:00
webpack.client.config.mjs fix(http): force macro task creation during HTTP request (#49546) 2023-03-29 09:13:41 -07:00
webpack.server.config.mjs test: run platform-server integration test with v13 partial compilation packages (#43431) 2021-10-01 18:28:44 +00:00

To add a new server side rendering E2E test

  • Add a new server side rendered application to src/
  • Edit webpack.client.config.js to add new entry point for the new client bundle
  • The index.html can access the client bundle from /built/.js
  • Edit src/server.ts to add the server side application to a new URL
  • Add a protractor test in e2e/ to test with the new URL