diff --git a/docs/app/component-testing/angular/api.mdx b/docs/app/component-testing/angular/api.mdx
index b7bed7f604..6197fede27 100644
--- a/docs/app/component-testing/angular/api.mdx
+++ b/docs/app/component-testing/angular/api.mdx
@@ -13,6 +13,11 @@ sidebar_label: API
### mount
+```js
+// for Angular 20 and 21 using zoneless configuration
+import { mount } from 'cypress/angular-zoneless'
+```
+
```js
import { mount } from 'cypress/angular'
```
@@ -142,18 +147,22 @@ providers, declarations, imports and even component @Inputs()
Description |
- | autoSpyOutputs |
+ autoSpyOutputs (deprecated) |
boolean (optional) |
flag to automatically create a cy.spy() for every component @Output()
- property
+ property. This is deprecated and not supported in
+ `cypress/angular-zoneless` and will be removed in a future version
|
- | autoDetectChanges |
+ autoDetectChanges (deprecated) |
boolean (optional) |
- flag defaulted to true to automatically detect changes in your components
+ flag defaulted to true to automatically detect changes in your components.
+ This is deprecated and not supported in `cypress/angular-zoneless` and
+ will be removed in a future version as it is not needed with zoneless
+ configuration
|
diff --git a/docs/app/component-testing/angular/examples.mdx b/docs/app/component-testing/angular/examples.mdx
index 75eab39e05..1699246f35 100644
--- a/docs/app/component-testing/angular/examples.mdx
+++ b/docs/app/component-testing/angular/examples.mdx
@@ -46,7 +46,6 @@ in the options:
cy.mount(StepperComponent, {
componentProperties: {
count: 100,
- change: new EventEmitter(),
},
})
```
@@ -157,6 +156,26 @@ it('clicking + fires a change event with the incremented value', () => {
})
```
+### Working with Legacy @Input() Decorators
+
+With the release of Angular 18, [signals](https://angular.dev/guide/signals) became the preferred way to handle data binding.
+However, legacy components that use `@Input()` and `@Output()` decorators are still supported.
+
+Interacting with legacy `@Input()` decorators is a bit different than working with signals.
+In order to update the `@Input()` value, you need to use the `componentRef.setInput` method so Angular change detection runs properly.
+Otherwise, you may see errors.
+
+```ts
+cy.mount(StepperComponent, { componentProperties: { count: 100 } })
+ .then(({ fixture }) => {
+ return cy.contains('span', '100').wrap(fixture)
+ })
+ .then((fixture) => {
+ fixture.componentRef.setInput('count', 110)
+ return cy.contains('span', '110')
+ })
+```
+
### Using createOutputSpy()
To make spying on event emitters easier, there is a utility function called
@@ -179,7 +198,13 @@ it('clicking + fires a change event with the incremented value', () => {
})
```
-### Using autoSpyOutputs
+### Using autoSpyOutputs (deprecated)
+
+:::caution
+
+The `autoSpyOutputs` flag is deprecated and not supported in `cypress/angular-zoneless` and will be removed in a future version.
+
+:::
You might find yourself repeatedly creating a `cy.spy()` for each of your
component outputs. Because of this, we created an easy mechanism to handle this
@@ -208,17 +233,8 @@ function. It currently does not work with the template syntax.
:::
-:::caution
-
-`autoSpyOutput` is an **experimental feature** and could be removed or changed
-in the future
-
-:::
-
### Signals
-With the releases of Angular versions [17.1](https://github.com/angular/angular/blob/main/CHANGELOG.md#1710-2024-01-17) and [17.2](https://github.com/angular/angular/blob/main/CHANGELOG.md#1720-2024-02-14), [input](https://github.com/angular/angular/pull/53521) and [model](https://github.com/angular/angular/pull/54252) signals were introduced into the `@angular/core` API. Though basic signals were introduced in Angular `16`, using all signals requires Angular `17.2` and above.
-
:::info
With Cypress 14, signal support is directly included in the `cypress/angular` testing harness.
@@ -434,7 +450,13 @@ This custom mount command will allow you to skip manually passing in the
`ButtonComponent` and `CardComponent` as declarations into each `cy.mount()`
call.
-### autoSpyOutputs
+### autoSpyOutputs (deprecated)
+
+:::caution
+
+The `autoSpyOutputs` flag is deprecated and not supported in `cypress/angular-zoneless` and will be removed in a future version.
+
+:::
Here is an example of defaulting `autoSpyOutputs` for every mounted component:
diff --git a/docs/app/component-testing/angular/overview.mdx b/docs/app/component-testing/angular/overview.mdx
index 235d813e2c..2850ba9e0e 100644
--- a/docs/app/component-testing/angular/overview.mdx
+++ b/docs/app/component-testing/angular/overview.mdx
@@ -20,11 +20,12 @@ sidebar_label: Overview
## Framework Support
-Cypress Component Testing supports Angular `^18.0.0`, `^19.0.0`, and `^20.0.0`.
+Cypress Component Testing supports Angular `^18.0.0`, `^19.0.0`, `^20.0.0`, and `^21.0.0`.
:::info
Our testing harness, `cypress/angular`, still requires `zone.js` and `@angular-devkit/build-angular` to be installed in your project, even if your project is zoneless or is built with `@angular/build`.
+If you wish to use the zoneless configuration, which is the default in Angular 21, you can use `cypress/angular-zoneless` testing harness instead as of Cypress `15.8.0`.
:::
## Tutorial
@@ -129,5 +130,5 @@ export default {
#### Sample Angular Apps
-- [Angular 18](https://github.com/cypress-io/cypress-component-testing-apps/tree/main/angular)
- [Angular 20 Standalone](https://github.com/cypress-io/cypress-component-testing-apps/tree/main/angular-standalone)
+- [Angular 21 Zoneless](https://github.com/cypress-io/cypress-component-testing-apps/tree/main/angular-zoneless)
diff --git a/docs/app/component-testing/get-started.mdx b/docs/app/component-testing/get-started.mdx
index cbf9b3f79b..8e417a8ae0 100644
--- a/docs/app/component-testing/get-started.mdx
+++ b/docs/app/component-testing/get-started.mdx
@@ -47,7 +47,7 @@ following development servers and frameworks:
| [Next.js 14-16](/app/component-testing/react/overview#Nextjs) | React 18-19 | Webpack 5 |
| [Vue with Vite](/app/component-testing/vue/overview#Vue-with-Vite) | Vue 3 | Vite 5-7 |
| [Vue with Webpack](/app/component-testing/vue/overview#Vue-with-Webpack) | Vue 3 | Webpack 5 |
-| [Angular](/app/component-testing/angular/overview#Framework-Configuration) | Angular 18-20 | Webpack 5 |
+| [Angular](/app/component-testing/angular/overview#Framework-Configuration) | Angular 18-21 | Webpack 5 |
| [Svelte with Vite](/app/component-testing/svelte/overview#Svelte-with-Vite) Alpha | Svelte 5 | Vite 5-7 |
| [Svelte with Webpack](/app/component-testing/svelte/overview#Svelte-with-Webpack) Alpha | Svelte 5 | Webpack 5 |