You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
This commit introduces a series of improvements to the unit testing overview guide to enhance clarity, organization, and accuracy.
The guide has been updated with a more streamlined flow and clearer explanations. Key changes include:
- A reorganized configuration section with more logical subsections for `angular.json` options and global setup.
- A completely restructured "Running tests in a browser" section, which now groups each browser provider with its installation commands, includes links to official documentation, and provides clearer instructions for controlling headless mode.
- A note clarifying that the `@vitest/browser-preview` provider is not suitable for CI environments.
- An update to the continuous integration guide to use the more modern `--watch=false` flag.
Copy file name to clipboardExpand all lines: adev/src/content/guide/testing/overview.md
+82-34Lines changed: 82 additions & 34 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -2,15 +2,15 @@
2
2
3
3
Testing your Angular application helps you check that it is working as you expect. Unit tests are crucial for catching bugs early, ensuring code quality, and facilitating safe refactoring.
4
4
5
-
NOTE: This guide focuses on the default testing setup for new Angular CLI projects. If you are migrating an existing project from Karma to Vitest, see the [Migrating from Karma to Vitest guide](guide/testing/migrating-to-vitest). While Vitest is the default test runner, Karma is still fully supported. For information on testing with Karma, see the [Karma testing guide](guide/testing/karma).
5
+
NOTE: This guide covers the default testing setup for new Angular CLI projects, which uses Vitest. If you are migrating an existing project from Karma, see the [Migrating from Karma to Vitest guide](guide/testing/migrating-to-vitest). Karma is still supported; for more information, see the [Karma testing guide](guide/testing/karma).
6
6
7
7
## Set up for testing
8
8
9
-
The Angular CLI downloads and installs everything you need to test an Angular application with the [Vitest testing framework](https://vitest.dev). By default, new projects include `vitest` and `jsdom`.
9
+
The Angular CLI downloads and installs everything you need to test an Angular application with the [Vitest testing framework](https://vitest.dev). New projects include `vitest` and `jsdom` by default.
10
10
11
-
Vitest runs your unit tests in a Node.js environment, using `jsdom` to emulate the DOM. This allows for faster test execution by avoiding the overhead of launching a browser. You can also use `happy-dom` as an alternative by installing it and removing`jsdom`. The CLI will automatically detect and use `happy-dom` if it is present.
11
+
Vitest runs your unit tests in a Node.js environment. To simulate the browser's DOM, Vitest uses a library called `jsdom`. This allows for faster test execution by avoiding the overhead of launching a browser. You can swap `jsdom` for an alternative like `happy-dom`by installing it and uninstalling`jsdom`.
12
12
13
-
The project you create with the CLI is immediately ready to test. Just run the [`ng test`](cli/test) CLI command:
13
+
The project you create with the CLI is immediately ready to test. Run the [`ng test`](cli/test) command:
14
14
15
15
```shell
16
16
ng test
@@ -31,26 +31,29 @@ The console output looks like this:
The `ng test` command also watches for changes. To see this in action, make a small change to `app.ts`and save it. The tests run again, and the new results appear in the console.
34
+
The `ng test` command also watches your files for changes. If you modify a file and save it, the tests will run again.
35
35
36
36
## Configuration
37
37
38
-
The Angular CLI handles most of the Vitest configuration for you. For many common use cases, you can adjust the test behavior by modifying options directly in your `angular.json` file.
38
+
The Angular CLI handles most of the Vitest configuration for you. You can customize the test behavior by modifying the `test` target options in your `angular.json` file.
39
39
40
-
### Built-in configuration options
41
-
42
-
You can change the following options in the `test` target of your `angular.json` file:
40
+
### Angular.json options
43
41
44
42
-`include`: Glob patterns for files to include for testing. Defaults to `['**/*.spec.ts', '**/*.test.ts']`.
45
43
-`exclude`: Glob patterns for files to exclude from testing.
46
44
-`setupFiles`: A list of paths to global setup files (e.g., polyfills or global mocks) that are executed before your tests.
47
45
-`providersFile`: The path to a file that exports a default array of Angular providers for the test environment. This is useful for setting up global test providers which are injected into your tests.
48
46
-`coverage`: A boolean to enable or disable code coverage reporting. Defaults to `false`.
49
-
-`browsers`: An array of browser names to run tests in (e.g., `["chromium"]`). Requires a browser provider to be installed.
47
+
-`browsers`: An array of browser names to run tests in a real browser (e.g., `["chromium"]`). Requires a browser provider to be installed. See the [Running tests in a browser](#running-tests-in-a-browser) section for more details.
48
+
49
+
### Global test setup and providers
50
+
51
+
The `setupFiles` and `providersFile` options are particularly useful for managing global test configuration.
50
52
51
53
For example, you could create a `src/test-providers.ts` file to provide `provideHttpClientTesting` to all your tests:
@@ -73,11 +76,7 @@ You would then reference this file in your `angular.json`:
73
76
"test": {
74
77
"builder": "@angular/build:unit-test",
75
78
"options": {
76
-
"include": ["src/**/*.spec.ts"],
77
-
"setupFiles": ["src/test-setup.ts"],
78
-
"providersFile": "src/test-providers.ts",
79
-
"coverage": true,
80
-
"browsers": ["chromium"]
79
+
"providersFile": "src/test-providers.ts"
81
80
}
82
81
}
83
82
}
@@ -86,13 +85,15 @@ You would then reference this file in your `angular.json`:
86
85
}
87
86
```
88
87
89
-
### Advanced: Custom Vitest configuration
88
+
HELPFUL: When creating new TypeScript files for test setup or providers, like `src/test-providers.ts`, ensure they are included in your project's test TypeScript configuration file (typically `tsconfig.spec.json`). This allows the TypeScript compiler to properly process these files during testing.
90
89
91
-
For advanced use cases, you can provide a custom Vitest configuration file.
90
+
### Advanced Vitest configuration
92
91
93
-
IMPORTANT: While using a custom configuration enables advanced options, the Angular team does not provide direct support for the specific contents of the configuration file or for any third-party plugins used within it. The CLI will also override certain properties (`test.projects`, `test.include`) to ensure proper operation.
92
+
For advanced use cases, you can provide a custom Vitest configuration file using the `configFile` option in `angular.json`.
94
93
95
-
You can create a Vitest configuration file (e.g., `vitest-base.config.ts`) and reference it in your `angular.json` using the `runnerConfig` option.
94
+
IMPORTANT: While using a custom configuration enables advanced options, the Angular team does not provide support for the contents of the configuration file or for any third-party plugins. The CLI will also override certain properties (`test.projects`, `test.include`) to ensure proper integration.
95
+
96
+
You can create a Vitest configuration file (e.g., `vitest-base.config.ts`) and reference it in your `angular.json`:
96
97
97
98
```json
98
99
{
@@ -119,24 +120,27 @@ ng generate config vitest
119
120
120
121
This creates a `vitest-base.config.ts` file that you can customize.
121
122
122
-
HELPFUL: Read more about Vitest configuration in the [Vitest configuration guide](https://vitest.dev/config/).
123
+
HELPFUL: Read more about Vitest configuration in the [official Vitest documentation](https://vitest.dev/config/).
123
124
124
125
## Code coverage
125
126
126
-
You can generate code coverage reports by adding the `--coverage` flag to the `ng test` command. The report is generated in the `coverage/` directory.
127
+
You can generate a code coverage report by adding the `--coverage` flag to the `ng test` command. The report is generated in the `coverage/` directory.
127
128
128
-
For more detailed information on prerequisites, enforcing coverage thresholds, and advanced configuration, see the [Code coverage guide](guide/testing/code-coverage).
129
+
For more detailed information, see the [Code coverage guide](guide/testing/code-coverage).
129
130
130
131
## Running tests in a browser
131
132
132
133
While the default Node.js environment is faster for most unit tests, you can also run your tests in a real browser. This is useful for tests that rely on browser-specific APIs (like rendering) or for debugging.
133
134
134
-
To run tests in a browser, you must first install a browser provider.
135
+
To run tests in a browser, you must first install a browser provider. Beyond installing the provider and specifying the `browsers` option in `angular.json` or as a CLI flag, no further configuration is required.
136
+
137
+
Read more about Vitest's browser mode in the [official documentation](https://vitest.dev/guide/browser).
138
+
135
139
Choose one of the following browser providers based on your needs:
136
140
137
-
-**Playwright**: `@vitest/browser-playwright` for Chromium, Firefox, and WebKit.
138
-
-**WebdriverIO**: `@vitest/browser-webdriverio` for Chrome, Firefox, Safari, and Edge.
139
-
-**Preview**: `@vitest/browser-preview` for Webcontainer environments (like StackBlitz).
141
+
### Playwright
142
+
143
+
[Playwright](https://playwright.dev/) is a browser automation library that supports Chromium, Firefox, and WebKit.
140
144
141
145
<docs-code-multifile>
142
146
<docs-codeheader="npm"language="shell">
@@ -153,33 +157,77 @@ Choose one of the following browser providers based on your needs:
153
157
</docs-code>
154
158
</docs-code-multifile>
155
159
156
-
Once the provider is installed, you can run your tests in the browser using the `--browsers` flag:
160
+
### WebdriverIO
161
+
162
+
[WebdriverIO](https://webdriver.io/) is a browser and mobile automation test framework that supports Chrome, Firefox, Safari, and Edge.
bun add --dev @vitest/browser-webdriverio webdriverio
176
+
</docs-code>
177
+
</docs-code-multifile>
178
+
179
+
### Preview
180
+
181
+
The `@vitest/browser-preview` provider is designed for Webcontainer environments like StackBlitz and is not intended for use in CI/CD.
182
+
183
+
<docs-code-multifile>
184
+
<docs-codeheader="npm"language="shell">
185
+
npm install --save-dev @vitest/browser-preview
186
+
</docs-code>
187
+
<docs-codeheader="yarn"language="shell">
188
+
yarn add --dev @vitest/browser-preview
189
+
</docs-code>
190
+
<docs-codeheader="pnpm"language="shell">
191
+
pnpm add -D @vitest/browser-preview
192
+
</docs-code>
193
+
<docs-codeheader="bun"language="shell">
194
+
bun add --dev @vitest/browser-preview
195
+
</docs-code>
196
+
</docs-code-multifile>
197
+
198
+
Once the provider is installed, you can run your tests in the browser using the `--browsers` flag. Tests run in a headed browser by default. If the `CI` environment variable is set, headless mode is used instead. To explicitly control headless mode, you can suffix the browser name with `Headless` (e.g., `chromiumHeadless`).
157
199
158
200
```bash
159
-
# Example for Playwright
201
+
# Example for Playwright (headed)
160
202
ng test --browsers=chromium
161
203
162
-
# Example for WebdriverIO
204
+
# Example for Playwright (headless)
205
+
ng test --browsers=chromiumHeadless
206
+
207
+
# Example for WebdriverIO (headed)
163
208
ng test --browsers=chrome
209
+
210
+
# Example for WebdriverIO (headless)
211
+
ng test --browsers=chromeHeadless
164
212
```
165
213
166
-
Headless mode is enabled automatically if the `CI` environment variable is set. Otherwise, tests will run in a headed browser.
214
+
For more advanced browser-specific configuration, see the [Advanced Vitest configuration](#advanced-vitest-configuration) section.
167
215
168
216
## Other test frameworks
169
217
170
-
You can also unit test an Angular application with other testing libraries and test runners. Each library and runner has its own distinctive installation procedures, configuration, and syntax.
218
+
You can also unit test an Angular application with other testing libraries and test runners. Each library and runner has its own installation procedures, configuration, and syntax.
171
219
172
220
## Testing in continuous integration
173
221
174
-
A robust test suite is a key part of a continuous integration (CI) pipeline. CI servers let you set up your project repository so that your tests run on every commit and pull request.
222
+
A robust test suite is a key part of a continuous integration (CI) pipeline. CI servers let you automate your tests to run on every commit and pull request.
175
223
176
-
To test your Angular application in a continuous integration (CI) server, you can typically run the standard test command:
224
+
To test your Angular application in a CI server, run the standard test command:
177
225
178
226
```shell
179
227
ng test
180
228
```
181
229
182
-
Most CI servers set a `CI=true` environment variable, which `ng test` detects. This automatically runs your tests in the appropriate non-interactive, single-run mode.
230
+
Most CI servers set a `CI=true` environment variable, which `ng test` detects. This automatically configures your tests to run in a non-interactive, single-run mode.
183
231
184
232
If your CI server does not set this variable, or if you need to force single-run mode manually, you can use the `--no-watch` and `--no-progress` flags:
0 commit comments