From 4659dcc26935c2715c8f5b40a77f2c20ba244d0a Mon Sep 17 00:00:00 2001 From: Johannes Hoppe Date: Tue, 18 Nov 2025 02:12:53 +0100 Subject: [PATCH 01/43] 2025-11-zu-vitest-migrieren --- blog/2025-11-zu-vitest-migrieren/README.md | 567 +++++++++++++++++++++ 1 file changed, 567 insertions(+) create mode 100644 blog/2025-11-zu-vitest-migrieren/README.md diff --git a/blog/2025-11-zu-vitest-migrieren/README.md b/blog/2025-11-zu-vitest-migrieren/README.md new file mode 100644 index 00000000..84698b93 --- /dev/null +++ b/blog/2025-11-zu-vitest-migrieren/README.md @@ -0,0 +1,567 @@ +--- +title: 'Vitest in Angular 21: Was ist neu und wie kann man migrieren?' +author: Johannes Hoppe +mail: johannes.hoppe@haushoppe-its.de +published: 2025-11-18 +lastModified: 2025-11-18 +keywords: + - Angular + - Angular 21 + - Vitest + - Karma + - Jamsine +language: de +header: TODO.jpg +--- + +Mit Angular 21 gibt es einen großen Schnitt im Unit‑Testing: +Vitest ist jetzt der Standard, die langjährige Kombination aus Karma und Jasmine wird abgelöst. +Beim Erzeugen eines neuen Projekts mit `ng new` fragt dich die CLI jetzt nach dem gewünschten Test‑Runner. +Vitest ist dabei die Voreinstellung. +Du kannst auf Wunsch weiterhin Jasmine wählen, aber für neue Projekte führt der Weg klar zu Vitest. + +## Warum Angular Karma und Jasmine ersetzt + +_Karma und Jasmine_ haben für Angular lange Jahre gute Dienste geleistet, vor allem wegen der Ausführung in einem echten Browser. +Es gab aber Nachteile: die Ausführgeschwindigkeit war nie optimal und das Ökosysteme war veraltetet ([Karma ist seit 2023 deprecated](https://github.com/karma-runner/karma#karma-is-deprecated-and-is-not-accepting-new-features-or-general-bug-fixes)). +Über mehrere Jahre prüfte das Angular-Team Alternativen (Jest, Web Test Runner usw.), ohne einen klaren Gewinner zu finden. +Vitest wurde inzwischen äußerst populär und erwies sich als passende Lösung. + +Vitest passte vor allem am besten, weil es einen echten Browser-Modus bietet. +Ähnlich wie zuvor unter Karma können Tests dadurch in einem realen Browser mit „echtem“ DOM und echten Ereignissen ausgeführt werden. +Der Browser-Modus von Vitest wurde ganz aktuell mit Vitest 4 im Oktober 2025 [als stabil deklariert](https://vitest.dev/blog/vitest-4.html#browser-mode-is-stable). +Gleichzeitig ist Vitest schnell und modern: Es baut auf [Vite](https://vite.dev/) auf, ist ESM- und TypeScript-first und sorgt so für äußerst kurze Start- und Wiederholungszeiten. +Dazu kommt eine sehr mächtige API mit Snapshot-Tests, flexiblen [Fake-Timern](https://vitest.dev/guide/mocking/timers.html), dem wirklich nützlichen Helfer [`expect.poll`](https://vitest.dev/api/expect.html#poll), [Test-Fixtures](https://vitest.dev/guide/test-context) und Jest-kompatiblen Matchern. +Nicht zuletzt ist Vitest im gesamten Frontend-Ökosystem breit akzeptiert, wodurch vorhandenes Know-how gut übertragen werden kann. +Kurz gesagt: Der Wechsel sorgt für Tempo, eine deutlich bessere Developer Experience und Zukunftssicherheit und hält dabei weiterhin die Möglichkeit echter Browser-Tests offen. + + +## Migrationsleitfaden: Von Karma/Jasmine zu Vitest + + + +**WICHTIG:** Die Migration eines bestehenden Projekts auf Vitest gilt derzeit als **experimentell**. Dieser Prozess setzt außerdem das Application-Buildsystem voraus, das bei neu erstellten Projekten standardmäßig aktiviert ist. Wenn du eine bestehende Angular Anwendung hast, update diese zunächst mit `ng update` auf Version 21 und führe anschließend folgende Anleitung durch. + +### Manuelle Migrationsschritte + +Bevor du das automatische Refactoring‑Schematic verwendest, musst du dein Projekt manuell so anpassen, dass Vitest als Test‑Runner verwendet wird. + +#### 1. Abhängigkeiten installieren + +Installiere `vitest` sowie eine DOM‑Emulationsbibliothek. +Obwohl Tests weiterhin im Browser ausgeführt werden können (siehe [chritt 5), verwendet Vitest standardmäßig eine DOM‑Emulation, um eine Browserumgebung in Node.js zu simulieren und Tests schneller auszuführen. +Die CLI erkennt automatisch `happy-dom`, falls es installiert ist; ansonsten greift sie auf `jsdom` zurück. +Eines der beiden Pakete muss vorhanden sein. + +```bash +npm install --save-dev vitest jsdom +``` + +#### 2. `angular.json` aktualisieren + +Suche in deiner `angular.json` den `test`‑Target deines Projekts und setze den `builder` auf `@angular/build:unit-test`. + +```json +{ + "projects": { + "your-project-name": { + "architect": { + "test": { + "builder": "@angular/build:unit-test" + } + } + } + } +} +``` + +Der `unit-test`‑Builder verwendet standardmäßig `"tsConfig": "tsconfig.spec.json"` und `"buildTarget": "::development"`. Falls dein Projekt andere Werte benötigt, etwa weil die `development`‑Konfiguration fehlt oder spezielle Test‑Einstellungen nötig sind, kannst du eine eigene `testing`‑ oder ähnlich benannte Build‑Konfiguration anlegen und zuweisen. + +Der vorherige Builder `@angular/build:karma` erlaubte es, Build‑Optionen (wie `polyfills`, `assets`, `styles`) direkt im `test`‑Target zu definieren. Der neue Builder `@angular/build:unit-test` unterstützt das nicht. +Falls sich deine Test‑Build‑Optionen von der `development`‑Konfiguration unterscheiden, musst du diese Optionen in eine eigene Build‑Konfiguration verschieben. +Stimmen sie bereits mit `development` überein, ist kein weiterer Schritt notwendig. + +> **Tipp:** Alternativ kannst du einfach ein neues Projekt mittels `ng new` erzeugen und die relevanten Abschnitte aus der neu generierten `angular.json` in dein bestehendes Projekt übernehmen. So erhältst du automatisch eine saubere Vorlage für die Vitest-Konfiguration. + + +#### 3. Eigene `karma.conf.js`‑Konfiguration berücksichtigen + +Eigene Einstellungen in `karma.conf.js` werden nicht automatisch migriert. +Prüfe diese Datei, bevor du sie löschst, und übertrage relevante Optionen manuell. +Viele Karma‑Optionen besitzen Vitest‑Entsprechungen, die du in einer `vitest.config.ts` definieren kannst und dann über `runnerConfig` in der `angular.json` einbindest. + +Typische Migrationspfade: + +* **Reporter:** Karma‑Reporter müssen durch Vitest‑kompatible Reporter ersetzt werden. Viele davon können direkt in `angular.json` unter `test.options.reporters` konfiguriert werden. Für komplexere Fälle nutze `vitest.config.ts`. +* **Plugins:** Karma‑Plugins erfordern passende Vitest‑Alternativen. Beachte, dass Code‑Coverage in der Angular CLI bereits integriert ist und über `ng test --coverage` aktiviert werden kann. +* **Eigene Browser‑Launcher:** Diese werden durch die Option `browsers` in der `angular.json` und die Installation eines Browser‑Providers wie `@vitest/browser-playwright` ersetzt. + +Weitere Einstellungen findest du in der offiziellen [Vitest‑Dokumentation](https://vitest.dev/config/). + +#### 4. Karma- und `test.ts`‑Dateien entfernen + +Du kannst nun `karma.conf.js` sowie `src/test.ts` löschen und alle Karma‑bezogenen Pakete deinstallieren. Die folgenden Befehle entsprechen einem Standard‑Angular‑Projekt; in deinem Projekt können weitere Pakete vorhanden sein. + +```bash +npm uninstall karma karma-chrome-launcher karma-coverage karma-jasmine karma-jasmine-html-reporter +``` + +#### 5. Browser‑Modus konfigurieren (optional) + +Falls du Tests in einem echten Browser ausführen möchtest, musst du einen Browser‑Provider installieren und die `angular.json` anpassen. + +**Browser‑Provider installieren** + +Wähle je nach Bedarf: + +* **Playwright:** `@vitest/browser-playwright` für Chromium, Firefox und WebKit +* **WebdriverIO:** `@vitest/browser-webdriverio` für Chrome, Firefox, Safari und Edge +* **Preview:** `@vitest/browser-preview` für Webcontainer‑Umgebungen wie StackBlitz + +```bash +npm install --save-dev @vitest/browser-playwright +``` + +**`angular.json` für Browser‑Modus erweitern** + +Füge im `test`‑Target die Option `browsers` hinzu. Der Browsername hängt vom verwendeten Provider ab (z. B. `chromium` bei Playwright). + +```json +{ + "projects": { + "your-project-name": { + "architect": { + "test": { + "builder": "@angular/build:unit-test", + "options": { + "browsers": ["chromium"] + } + } + } + } + } +} +``` + +Headless‑Modus wird automatisch aktiviert, wenn die Umgebungsvariable `CI` gesetzt ist oder der Browsername "Headless" enthält (z. B. `ChromeHeadless`). +Andernfalls läuft der Browser sichtbar. + +### Automatisches Test‑Refactoring per Schematic + +**WICHTIG:** Das Schematic `refactor-jasmine-vitest` ist experimentell und deckt nicht alle Pattern ab. Überprüfe die Änderungen immer manuell. + +Das Angular CLI stellt ein Schematic bereit, das Jasmine‑Tests automatisch auf Vitest umstellt. + +#### Überblick + +Das Schematic führt folgende Umwandlungen in `.spec.ts`‑Dateien durch: + +* `fit`/`fdescribe` → `it.only`/`describe.only` +* `xit`/`xdescribe` → `it.skip`/`describe.skip` +* `spyOn` → `vi.spyOn` +* `jasmine.objectContaining` → `expect.objectContaining` +* `jasmine.any` → `expect.any` +* `jasmine.createSpy` → `vi.fn` +* Umstellung der Lifecycle‑Hooks (`beforeAll`, `beforeEach`, etc.) auf Vitest‑Varianten +* `fail()` → `vi.fail()` +* Anpassung von Matchern an die Vitest‑API +* TODO‑Kommentare für nicht automatisch konvertierbare Stellen + +Das Schematic **macht nicht**: + +* Installation von Vitest oder anderen Abhängigkeiten +* Änderungen an `angular.json` zum Aktivieren des Vitest‑Builders +* Entfernen von Karma‑Dateien +* Konvertierung komplexer Spy‑Szenarien + +### Schematic ausführen + +Wenn dein Projekt für Vitest konfiguriert ist, kannst du das automatische Refactoring starten: + +```bash +ng g @schematics/angular:refactor-jasmine-vitest +``` + +Das Schematic bietet eine Reihe von zusätzlichen Optionen: + +| Option | Beschreibung | +| ------------------ | --------------------------------------------------------------------- | +| `--project ` | Wählt ein bestimmtes Projekt in einem Workspace aus. | +| `--include ` | Beschränkt das Refactoring auf eine Datei oder ein Verzeichnis. | +| `--file-suffix` | Legt eine andere Dateiendung für Testdateien fest. | +| `--add-imports` | Fügt explizite Vitest‑Im­porte hinzu, falls Globals deaktiviert sind. | +| `--verbose` | Aktiviert detailliertes Logging der durchgeführten Änderungen. | + +### Nach der Migration + +1. **Tests ausführen:** Nutze `ng test`, um sicherzustellen, dass alle Tests weiterhin funktionieren. +2. **Änderungen prüfen:** Sieh dir die Anpassungen an, besonders bei komplexen Spies oder asynchronen Tests. + +`ng test` führt Tests im **Watch‑Modus** aus, sofern das Terminal interaktiv ist. Auf CI läuft der Test‑Runner automatisch im Single‑Run‑Modus. + +## Konfiguration + +Die Angular CLI erzeugt die Vitest‑Konfiguration im Hintergrund basierend auf den Optionen in `angular.json`. + +### Eigene Vitest‑Konfiguration + +**WICHTIG:** Die Angular‑CLI unterstützt eine eigene Vitest‑Konfiguration, aber übernimmt keinerlei Verantwortung für deren Inhalt. Einige Einstellungen wie `test.projects` und `test.include` werden vom CLI‑Builder überschrieben. + +Du kannst jedoch eine `vitest.config.ts` einbinden. + +**1. Direkter Pfad** + +```json +{ + "projects": { + "your-project-name": { + "architect": { + "test": { + "builder": "@angular/build:unit-test", + "options": { + "runnerConfig": "vitest.config.ts" + } + } + } + } + } +} +``` + +**2. Automatische Suche** + +Wenn du `"runnerConfig": true` setzt, sucht der Builder automatisch nach einer Datei `vitest-base.config.*` im Projekt‑ oder Workspace‑Root. + + + + + +Eine wichtige Erninnerung: Das Schematic `@schematics/angular:refactor-jasmine-vitest` arbeitet **ausschließlich am Test-Quellcode**. +Es installiert keine Vitest-Abhängigkeiten und stellt auch nicht automatisch deine `angular.json` auf den Vitest-Runner um. +Die Konfiguration des `unit-test`-Builders geschieht wie zuvor gezeigt über `ng update` und anschließende manuelle Anpassungen. + + + +## Die neue Syntax und APIs + +Die meisten Specs laufen unverändert, denn **TestBed, ComponentFixture & Co.** bleiben bestehen. +Bei der Migration von Jasmine zu Vitest bleiben viele Testmuster vertraut, gleichzeitig ändert sich an einigen Stellen die konkrete API. +Neu lernen musst du vor allem Jasmine‑spezifische Stellen. + +### Globale Funktionen + +Die bekannten globalen Testfunktionen wie `describe`, `it` bzw. `test`, `beforeEach`, `afterEach` und `expect` bleiben in Vitest unverändert erhalten. +Sie stehen ohne weitere Importe zur Verfügung, sofern in deiner `tsconfig.spec.json` der Eintrag `types: ["vitest/globals"]` gesetzt ist. +Trotzdem empfehlen wir, diese Funktionen explizit zu importieren. +Dadurch vermeidest du mögliche Namenskollisionen, etwa mit gleichnamigen Funktionen aus Cypress, was in der Vergangenheit regelmäßig zu verwirrenden Problemen geführt hat. + +### Matcher + +Die üblichen Matcher wie `toBe`, `toEqual`, `toContain` oder `toHaveBeenCalledWith` stehen in Vitest weiterhin zur Verfügung. Wenn du in Jasmine `jasmine.any(...)` verwendet hast, nutzt du in Vitest `expect.any(...)`. Wichtig: Vitest hat als Ziel nicht eine Kompatible API mit Jasmine, sondern bietet möglichst [**Jest‑kompatible** Expect‑API](https://vitest.dev/api/expect.html) auf Basis von Chai. +Und Jest wiederrum hat als Ziel einigermaßen mit Jasmine kompatiblel zu sein. +Weil aber Vitest nur mit Jest kompatibel sein will, ergeben sich folgende Herausforderungen, da einige Matcher schlicht fehlen: + +**1) `toBeTrue()` / `toBeFalse()` gibt es in Jest/Vitest nicht** + +Jasmine bringt die strikten Bool‑Matcher `toBeTrue()` und `toBeFalse()` mit. In Jest (und damit Vitest) existieren sie nicht; du verwendest stattdessen einfach `toBe(true)` bzw. `toBe(false)`. + +```ts +// Jasmine +expect(result).toBeTrue(); +expect(flag).toBeFalse(); + +// Jest/Vitest +expect(result).toBe(true); +expect(flag).toBe(false); +``` + +**2) `toHaveBeenCalledOnceWith()`: in Jasmine vorhanden, in Jest/Vitest (Core) nicht** + +Jasmine hat den Mathcher für Spione mit der praktischen Prüfung auf "genau einmal und genau mit diesen Argumenten". +In Jest/Vitest Core gibt es diesen Matcher leider nicht. +Al Ersatz kombinierst du einfach `toHaveBeenCalledTimes(1)` mit `toHaveBeenCalledWith(...)`: + +```ts +var book = {}; + +// Jasmine +expect(spy).toHaveBeenCalledOnceWith(book); + +// Jest/Vitest +expect(spy).toHaveBeenCalledTimes(1); +expect(spy).toHaveBeenCalledWith(book); +``` + +**3) Asynchrone Matchers: `expectAsync(...)` (Jasmine) vs. `.resolves/.rejects` (Jest/Vitest)** + +Jasmine hat eine [eigene Async‑API](https://jasmine.github.io/api/5.12/async-matchers): `await expectAsync(promise).toBeResolved() / toBeRejectedWith(...)`. +Jest/Vitest nutzen stattdessen das Muster [`await expect(promise).resolves/...`](https://vitest.dev/api/expect.html#resolves) bzw. [`.rejects/...`](https://vitest.dev/api/expect.html#rejects). +Beim Umstieg müssen diese Expectations umgeschrieben werden. + +```ts +// Jasmine +await expectAsync(doWork()).toBeResolved(); +await expectAsync(doWork()).toBeResolvedTo('OK'); +await expectAsync(doWork()).toBeRejectedWithError('Boom'); + +// Jest/Vitest +await expect(doWork()).resolves.toBeDefined(); +await expect(doWork()).resolves.toBe('OK'); +await expect(doWork()).rejects.toThrow('Boom'); +``` + +Vitest zielt also bei den Matchern auf Jest‑Kompatibilität ab. +Kompatibilität mit Jasmine steht hingegen überhaupt nicht im Fokus. +In der Praxis ist der Anpassungsaufwand meist gering (vor allem bei `toBeTrue`/`toBeFalse` und `toHaveBeenCalledOnceWith`), aber er existiert. +Bei asynchronen Erwartungen unterscheidet sich das Pattern sogar deutlich. Allerdings wurde `expectAsync` in der Angular-Dokumentation nie erwähnt; stattdessen wurden eigene Hilfsfunktionen gezeigt. +Daher dürfte in den meisten Projekten hier wahrscheinlich gar keine zusätzliche Arbeit anfallen. + + +### Spies und Mocks + +Das Spying-Konzept funktioniert nahezu identisch wie bei Jasmine, wird jedoch über das [`vi`‑Objekt bereitgestellt](https://vitest.dev/api/vi.html#vi-spyon): + +```ts +// Jasmine +spyOn(service, 'loadData').and.returnValue(of([])); + +// Vitest +vi.spyOn(service, 'loadData').mockReturnValue(of([])); +``` + +Für Spies, die bei Jasmine mit `jasmine.createSpy()` erzeugt wurden, verwendest du in Vitest jetzt einfach [`vi.fn()`](https://vitest.dev/api/vi.html#vi-fn): + +```ts +// Jasmine +const onItem = jasmine.createSpy().and.returnValue(true); + +// Vitest +const onItem = vi.fn().mockReturnValue(true); +``` + +In Jasmine kann man mit den ersten Parameter einen Namen vergeben, dies dient dazu, in Fehlermeldungen und Reports aussagekräftigere Texte anzuzeigen. (siehe [Doku](https://jasmine.github.io/api/5.12/jasmine#.createSpy)). Falls du in Vitest ebenfalls einem einen sprechenden Namen geben möchtest, kannst du dies mit `.mockName('onItem')` tun. + +```ts +// Jasmine - mit Name +const onItem = jasmine.createSpy('onItem').and.returnValue(true); + +// Vitest - mit Name +const onItem = vi.fn().mockName('onItem').mockReturnValue(true); +``` + +### Asynchronität ohne Zone.js aber mit Vitests + +Seit Angular 21 laufen Unit-Tests standardmäßig zoneless. +Das bedeutet: Die früheren Angular-Hilfsfunktionen `waitForAsync()` und `fakeAsync()/tick()` funktionieren nicht mehr automatisch, weil sie auf Zone.js basieren. +Entscheidend ist: Das hat erstmal nichts mit Vitest zu tun. +Auch unter Jasmine hätte man in einer zonenlosen Umgebung auf diese Utilities verzichten müssen. + +Für einfache asynchrone Tests ersetzt man `waitForAsync()` daher durch ganz normales `async/await`, das es seit vielen Jahren auch mit Jasmine möglich ist. +Folgendes Update funktioniert also unabhängig vom Test-Runner: + +```ts +// FRÜHER: waitsForAsync + Zone.js +it('should load data', waitForAsync(() => { + service.getData().then(result => { + expect(result.title).toContain('Hello'); + }); +})); + +// MODERN: zoneless + async/await +it('should load data', async () => { + const result = await service.getData(); + expect(result.title).toContain('Hello'); +}); +``` + +Ggf. muss der Service für dieses Beispiel "ausgemockt" werden damit es funktioniert. +Hier bleibt alles unverändert. +Modern ist nur die Schreibweise bei der es zwischen Jasmine und Vitest keinen Unterschied gibt. + +Der zweite Angular-Klassiker [`fakeAsync()`](https://angular.dev/api/core/testing/fakeAsync) und [`tick()`](https://angular.dev/api/core/testing/tick) braucht hingegen einen echten Ersatz. +(Hinweis: Dieser beiden Helfer sind nicht Bestandteil von Jasmine, sondern kommen aus `@angular/core/testing`.) +Vitest bringt ein eigenes [Fake-Timer-System](https://vitest.dev/api/vi.html#fake-timers) mit. +Das ganze benötigt etwas Einarbeitung. +Denn nicht jeder Timer funktioniert gleich und nicht jeder Test braucht dieselben Werkzeuge. +Beginnen wir mit einem einfachen, Zeit-basierten Beispiel. +Die folgende Funktion erhöht einen Counter nach genau fünf Sekunden: + +```ts +export function startFiveSecondTimer(counter: { value: number }) { + setTimeout(() => { + counter.value++; + }, 5000); +} +``` + +Für solche Fälle ist `vi.advanceTimersByTime()` ideal, denn man kann gezielt simulieren, dass exakt eine bestimmte Zeit verstrichen ist. Ganz ähnlich wie früher `tick(5000)`, aber ohne fakeAsync-Zone: + +```ts +import { describe, it, expect, vi } from 'vitest'; +import { startFiveSecondTimer } from './timer-basic'; + +describe('startFiveSecondTimer', () => { + it('erhöht den Counter nach exakt 5 Sekunden', () => { + vi.useFakeTimers(); + + const counter = { value: 0 }; + startFiveSecondTimer(counter); + + // simuliert das Vergehen von 5 Sekunden + vi.advanceTimersByTime(5000); + + expect(counter.value).toBe(1); + + vi.useRealTimers(); + }); +}); +``` + +`advanceTimersByTime()` ist damit der unmittelbare Ersatz für `tick()`. +Es eignet sich besonders gut, wenn du eine ganz bestimmte Zeitspanne simulieren oder mehrere Timer in korrekt getakteter Reihenfolge ablaufen lassen möchtest. + + +Doch nicht alle Timer sind so einfach. +Manchmal besteht der Code nur aus Timer-basierten Aktionen, aber ohne zusätzliche Promises. Das folgende Beispiel inkrementiert einen Counter mehrfach – rein über Timeouts und Intervals: + +```ts +// timer-sync.ts +export function startSyncSequence(counter: { value: number }) { + setTimeout(() => { counter.value++; }, 300); + const interval = setInterval(() => { + counter.value++; + if (counter.value === 3) { + clearInterval(interval); + } + }, 200); +} +``` + +In Fällen, in denen du *alle* Timer der Reihe nach abarbeiten willst, ohne manuell Zeit vorzuspulen, nutzt du `vi.runAllTimers()`: + +```ts +import { describe, it, expect, vi } from 'vitest'; +import { startSyncSequence } from './timer-sync'; + +describe('startSyncSequence', () => { + it('führt alle synchronen Timer vollständig aus', () => { + vi.useFakeTimers(); + + const counter = { value: 0 }; + startSyncSequence(counter); + + // führt alle Timer und Intervals aus, bis die Timer-Queue leer ist + vi.runAllTimers(); + + expect(counter.value).toBe(3); + + vi.useRealTimers(); + }); +}); +``` + +Hier wäre `advanceTimersByTime()` zwar möglich, aber unnötig kompliziert. `runAllTimers()` löst einfach jedes Timeout und jedes Interval aus, bis nichts mehr übrig ist. + +Noch interessanter wird es, wenn Timer-Callbacks selbst wieder asynchron arbeiten – etwa durch ein `await` oder Promise-Ketten. Dann reicht `runAllTimers()` nicht mehr aus. Das folgende Beispiel zeigt ein typisches Muster aus realen Anwendungen: + +```ts +// timer-async.ts +export function startAsyncJob(): Promise { + return new Promise(resolve => { + setTimeout(async () => { + const data = await Promise.resolve('done'); // asynchroner Schritt im Callback + resolve(data); + }, 100); + }); +} +``` + +Damit der Test nicht nur den Timeout, sondern auch das `await` im Callback vollständig abarbeitet, bietet Vitest `runAllTimersAsync()` an: + +```ts +import { describe, it, expect, vi } from 'vitest'; +import { startAsyncJob } from './timer-async'; + +describe('startAsyncJob', () => { + it('führt Timer und async-Callbacks vollständig aus', async () => { + vi.useFakeTimers(); + + const promise = startAsyncJob(); + + // führt Timer UND asynchrone Logik innerhalb der Timer-Callbacks aus + await vi.runAllTimersAsync(); + + await expect(promise).resolves.toBe('done'); + + vi.useRealTimers(); + }); +}); +``` + +`runAllTimersAsync()` ist damit der konsequente Ersatz für Jasmine-Szenarien, in denen `fakeAsync()` und `tick()` zusammen mit Microtask-Flushing verwendet wurden. Vitest macht das Ganze expliziter. + +### TestBed und ComponentFixture + +Nach all den kleinen, aber subtilen Unterschieden zwischen Jasmine und Vitest gibt es hier gute Nachrichten: +Die Verwendung von `TestBed` und `ComponentFixture` bleibt vollständig unverändert, da dies kein Thema ist, das Vitest berührt. +Du erzeugst weiterhin deine Komponenten oder Services mithilfe von `TestBed`. +Auch der explizite Aufruf von `fixture.detectChanges()` ist unverändert notwendig, um die Change Detection manuell anzustoßen. + + + +## Vitests Browser‑Modus: Emulation, Partial, Full + + + +Vitest kann Tests **in Node mit emuliertem DOM** oder **im echten Browser** ausführen. +Hier eine kurze Einordnung: + +### Emulierter DOM (Node + jsdom) + +Im emulierten DOM-Modus laufen Tests standardmäßig in einer Node-Umgebung mit [jsdom](https://github.com/jsdom/jsdom). Dieser Modus ist sehr schnell, simuliert aber nicht vollständig das exakte Verhalten eines echten Browsers. Für die überwiegende Mehrheit klassischer Unit-Tests ist der jsdom-Modus dennoch völlig ausreichend. + +### Partial Browser Mode + +Im Partial Browser Mode laufen sowohl der Test- als auch der App-Code direkt in einer echten Browser-Umgebung, beispielsweise innerhalb einer Iframe-Session. Dabei kannst du unmittelbar auf das `document`-Objekt zugreifen oder DOM-Utilities verwenden. Ereignisse, Fokusverhalten und Timing entsprechen dabei realistischen Bedingungen. Dieser Modus ist besonders geeignet für Komponenten-Tests, wenn jsdom an seine Grenzen stößt. Der Partial Browser Mode ist zwar etwas langsamer als der jsdom-Modus, bietet aber deutlich mehr Zuverlässigkeit bei UI-Details. + +### Full Browser Mode + +Im Full Browser Mode steuern die Tests den Browser extern über eine `page`-API, ähnlich wie es bei Playwright der Fall ist. Dadurch erhältst du Zugriff auf umfassende Actionability-Checks, robuste Elementselektoren und realistisches Benutzerverhalten. Dieser Modus liefert die realistischsten Testergebnisse, ist jedoch auch schwergewichtiger und verlangt einen ausführlicheren Test-Code. Besonders gut geeignet ist der Full Browser Mode für komplexe Interaktionen wie Drag-and-Drop, Datei-Uploads oder Canvas-Manipulationen. + +### Wann solltest du welchen Modus verwenden? + +Für Tests, die reine Logik oder einfache DOM-Abfragen enthalten, ist der jsdom-Modus optimal. Möchtest du realistischere UI-Interaktionen testen, greifst du am besten zum Partial Browser Mode. Für besonders kritische UI-Fälle mit komplexen Anforderungen eignet sich der Full Browser Mode am besten. Dabei kannst du Projekte oder spezifische Teile deiner Tests gezielt in einem echten Browser laufen lassen. + + +## Bekannte Einschränkungen und Fallstricke + +Die Anpassungsmöglichkeiten bei der Konfiguration sind derzeit begrenzt, da eine individuelle `vitest.config.*` in der aktuellen CLI-Integration nicht vorgesehen ist. Stattdessen werden viele (aber nicht alle) Optionen über die `angular.json` gesteuert. + +Spezielle Karma-Anwendungsfälle wie eigene Karma-Plugins oder individuelle Browser-Launcher lassen sich erwartungsgemäß nicht direkt auf Vitest übertragen, da sich Vitest ausschließlich auf moderne Evergreen-Browser konzentriert. + +Bei der Umstellung auf Vitest kann eine kurze Gewöhnungsphase im Team nötig sein, da bestimmte neue API-Konzepte wie `vi.spyOn`, `vi.fn` oder Restore-Strategien zwar leicht zu erlernen sind, sich aber dennoch von Jasmine unterscheiden. Achte deshalb darauf, dass deine Tests mögliche Manipulationen an globalen Objekten vollständig aufräumen und verwende dafür idealerweise Methoden wie [`afterEach`](https://vitest.dev/api/#aftereach) mit [`vi.restoreAllMocks()`](https://vitest.dev/api/vi.html#vi-restoreallmocks). + + +## Fazit + +Mit Vitest als Standard in Angular 21 wird das Testen spürbar moderner und schneller. +Die Umstellung ist meist unkompliziert, die Migrations‑Schematics helfen beim Einstieg. +Wo früher `fakeAsync` und Zone.js‑Magie nötig waren, reichen heute `async/await` und flexible Fake‑Timer. +Und wenn es realistisch sein muss, steht dir der Browser‑Modus zur Verfügung. +Insgesamt bedeutet das: kürzere Feedback‑Schleifen, robustere Tests und weniger Reibung im Alltag. Viel Spaß beim Testen! From 23e9158cb44286f13113b28022f279dfa0938c1b Mon Sep 17 00:00:00 2001 From: Johannes Hoppe Date: Tue, 18 Nov 2025 02:38:59 +0100 Subject: [PATCH 02/43] WIP --- blog/2025-11-zu-vitest-migrieren/README.md | 76 +++++++++++++++------- 1 file changed, 51 insertions(+), 25 deletions(-) diff --git a/blog/2025-11-zu-vitest-migrieren/README.md b/blog/2025-11-zu-vitest-migrieren/README.md index 84698b93..c7df3484 100644 --- a/blog/2025-11-zu-vitest-migrieren/README.md +++ b/blog/2025-11-zu-vitest-migrieren/README.md @@ -20,6 +20,37 @@ Beim Erzeugen eines neuen Projekts mit `ng new` fragt dich die CLI jetzt nach de Vitest ist dabei die Voreinstellung. Du kannst auf Wunsch weiterhin Jasmine wählen, aber für neue Projekte führt der Weg klar zu Vitest. +## Inhalt + +- [Warum Angular Karma und Jasmine ersetzt](#warum-angular-karma-und-jasmine-ersetzt) +- [Migrationsleitfaden: Von Karma/Jasmine zu Vitest](#migrationsleitfaden-von-karmajasmine-zu-vitest) + - [Manuelle Migrationsschritte](#manuelle-migrationsschritte) + - [1. Abhängigkeiten installieren](#1-abhängigkeiten-installieren) + - [2. `angular.json` aktualisieren](#2-angularjson-aktualisieren) + - [3. Eigene `karma.conf.js`‑Konfiguration berücksichtigen](#3-eigene-karmaconfjskonfiguration-berücksichtigen) + - [4. Karma- und `test.ts`‑Dateien entfernen](#4-karma--und-testtsdateien-entfernen) + - [5. Browser‑Modus konfigurieren (optional)](#5-browsermodus-konfigurieren-optional) + - [Automatisches Test‑Refactoring per Schematic](#automatisches-testrefactoring-per-schematic) + - [1. Überblick](#1-überblick) + - [2. Schematic ausführen](#2-schematic-ausführen) + - [3. Nach der Migration](#3-nach-der-migration) + - [4. Benutzerdefinierten Konfiguration (optional)](#4-benutzerdefinierten-konfiguration-optional) +- [Die neue Syntax und APIs](#die-neue-syntax-und-apis) + - [Globale Funktionen](#globale-funktionen) + - [Matcher](#matcher) + - [Spies und Mocks](#spies-und-mocks) + - [Asynchronität ohne Zone.js aber mit Vitests](#asynchronität-ohne-zonejs-aber-mit-vitests) + - [TestBed und ComponentFixture](#testbed-und-componentfixture) +- [Vitests Browser‑Modus: Emulation, Partial, Full](#vitests-browsermodus-emulation-partial-full) + - [Emulierter DOM (Node + jsdom)](#emulierter-dom-node--jsdom) + - [Partial Browser Mode](#partial-browser-mode) + - [Full Browser Mode](#full-browser-mode) + - [Wann solltest du welchen Modus verwenden?](#wann-solltest-du-welchen-modus-verwenden) +- [Bekannte Einschränkungen und Fallstricke](#bekannte-einschränkungen-und-fallstricke) +- [Fazit](#fazit) + + + ## Warum Angular Karma und Jasmine ersetzt _Karma und Jasmine_ haben für Angular lange Jahre gute Dienste geleistet, vor allem wegen der Ausführung in einem echten Browser. @@ -150,9 +181,9 @@ Andernfalls läuft der Browser sichtbar. **WICHTIG:** Das Schematic `refactor-jasmine-vitest` ist experimentell und deckt nicht alle Pattern ab. Überprüfe die Änderungen immer manuell. -Das Angular CLI stellt ein Schematic bereit, das Jasmine‑Tests automatisch auf Vitest umstellt. +Das Angular CLI stellt ein Schematic bereit, das deine Jasmine‑Tests automatisch auf Vitest umstellt. -#### Überblick +#### 1. Überblick Das Schematic führt folgende Umwandlungen in `.spec.ts`‑Dateien durch: @@ -165,16 +196,14 @@ Das Schematic führt folgende Umwandlungen in `.spec.ts`‑Dateien durch: * Umstellung der Lifecycle‑Hooks (`beforeAll`, `beforeEach`, etc.) auf Vitest‑Varianten * `fail()` → `vi.fail()` * Anpassung von Matchern an die Vitest‑API -* TODO‑Kommentare für nicht automatisch konvertierbare Stellen +* [TODO-Kommentare](https://github.com/angular/angular-cli/pull/31469) für nicht automatisch konvertierbare Stellen +* Tests mit `done`-Callback werden in `async`/`await`-Tests umgeschrieben + -Das Schematic **macht nicht**: +Das Schematic führt bestimmte Aufgaben bewusst nicht durch. Es installiert weder Vitest noch andere erforderliche Abhängigkeiten. Außerdem nimmt es keine Änderungen an der `angular.json` vor, um den Vitest‑Builder zu aktivieren. Ebenso entfernt es keine Karma‑Dateien aus dem Projekt. Schließlich konvertiert das Schematic auch keine komplexen Spy‑Szenarien, die daher weiterhin manuell überarbeitet werden müssen. -* Installation von Vitest oder anderen Abhängigkeiten -* Änderungen an `angular.json` zum Aktivieren des Vitest‑Builders -* Entfernen von Karma‑Dateien -* Konvertierung komplexer Spy‑Szenarien -### Schematic ausführen +#### 2. Schematic ausführen Wenn dein Projekt für Vitest konfiguriert ist, kannst du das automatische Refactoring starten: @@ -192,24 +221,21 @@ Das Schematic bietet eine Reihe von zusätzlichen Optionen: | `--add-imports` | Fügt explizite Vitest‑Im­porte hinzu, falls Globals deaktiviert sind. | | `--verbose` | Aktiviert detailliertes Logging der durchgeführten Änderungen. | -### Nach der Migration +#### 3. Nach der Migration 1. **Tests ausführen:** Nutze `ng test`, um sicherzustellen, dass alle Tests weiterhin funktionieren. 2. **Änderungen prüfen:** Sieh dir die Anpassungen an, besonders bei komplexen Spies oder asynchronen Tests. `ng test` führt Tests im **Watch‑Modus** aus, sofern das Terminal interaktiv ist. Auf CI läuft der Test‑Runner automatisch im Single‑Run‑Modus. -## Konfiguration +#### 4. Benutzerdefinierten Konfiguration (optional) Die Angular CLI erzeugt die Vitest‑Konfiguration im Hintergrund basierend auf den Optionen in `angular.json`. -### Eigene Vitest‑Konfiguration +Wem die vorgesehenen Optionen nicht ausreichen, der kann eine benutzerdefinierte Konfiguration verwenden. Damit werden zwar erweiterte Optionen verfügbar, das Angular-Team bietet jedoch keinen direkten Support für die spezifischen Inhalte der Konfigurationsdatei oder darin verwendete Plugins von Drittanbietern. +Die CLI überschreibt außerdem bestimmte Eigenschaften (`test.projects`, `test.include`), um einen ordnungsgemäßen Betrieb sicherzustellen. -**WICHTIG:** Die Angular‑CLI unterstützt eine eigene Vitest‑Konfiguration, aber übernimmt keinerlei Verantwortung für deren Inhalt. Einige Einstellungen wie `test.projects` und `test.include` werden vom CLI‑Builder überschrieben. - -Du kannst jedoch eine `vitest.config.ts` einbinden. - -**1. Direkter Pfad** +Du kannst bei Bedarf eine eigene Vitest-Konfigurationsdatei (`vitest.config.ts`) einbinden, um weitergehende Anpassungen vorzunehmen, die über die Standardoptionen hinausgehen. Dabei gibt es zwei mögliche Wege: Entweder verweist du direkt auf eine bestimmte Konfigurationsdatei, indem du den exakten Pfad in der `angular.json` angibst: ```json { @@ -228,9 +254,11 @@ Du kannst jedoch eine `vitest.config.ts` einbinden. } ``` -**2. Automatische Suche** +Oder du lässt die Angular CLI automatisch suchen. +Bei automatischer Suche setzt du `"runnerConfig": true` in der `angular.json`. +Der Builder sucht dann selbstständig nach einer Datei namens `vitest-base.config.*`, zunächst im Projektverzeichnis und anschließend im Workspace-Root. +So kannst du beispielsweise gemeinsame Einstellungen zentral definieren und bequem wiederverwenden. -Wenn du `"runnerConfig": true` setzt, sucht der Builder automatisch nach einer Datei `vitest-base.config.*` im Projekt‑ oder Workspace‑Root. @@ -291,11 +319,11 @@ expect(result).toBe(true); expect(flag).toBe(false); ``` -**2) `toHaveBeenCalledOnceWith()`: in Jasmine vorhanden, in Jest/Vitest (Core) nicht** +**2) `toHaveBeenCalledOnceWith()` gibt es in Jest/Vitest nicht** -Jasmine hat den Mathcher für Spione mit der praktischen Prüfung auf "genau einmal und genau mit diesen Argumenten". +Jasmine hat einen praktischen Matcher für Spione mit der Prüfung auf "genau einmal und genau mit diesen Argumenten". In Jest/Vitest Core gibt es diesen Matcher leider nicht. -Al Ersatz kombinierst du einfach `toHaveBeenCalledTimes(1)` mit `toHaveBeenCalledWith(...)`: +Als Ersatz kombinierst du einfach `toHaveBeenCalledTimes(1)` mit `toHaveBeenCalledWith(...)`: ```ts var book = {}; @@ -551,9 +579,7 @@ Für Tests, die reine Logik oder einfache DOM-Abfragen enthalten, ist der jsdom- ## Bekannte Einschränkungen und Fallstricke -Die Anpassungsmöglichkeiten bei der Konfiguration sind derzeit begrenzt, da eine individuelle `vitest.config.*` in der aktuellen CLI-Integration nicht vorgesehen ist. Stattdessen werden viele (aber nicht alle) Optionen über die `angular.json` gesteuert. - -Spezielle Karma-Anwendungsfälle wie eigene Karma-Plugins oder individuelle Browser-Launcher lassen sich erwartungsgemäß nicht direkt auf Vitest übertragen, da sich Vitest ausschließlich auf moderne Evergreen-Browser konzentriert. +Spezielle Karma-Anwendungsfälle wie eigene Karma-Plugins oder individuelle Browser-Launcher lassen sich erwartungsgemäß nicht direkt auf Vitest übertragen. Du wirst im Vitest Ökosystem nach Alternative suchen müssen. Bei der Umstellung auf Vitest kann eine kurze Gewöhnungsphase im Team nötig sein, da bestimmte neue API-Konzepte wie `vi.spyOn`, `vi.fn` oder Restore-Strategien zwar leicht zu erlernen sind, sich aber dennoch von Jasmine unterscheiden. Achte deshalb darauf, dass deine Tests mögliche Manipulationen an globalen Objekten vollständig aufräumen und verwende dafür idealerweise Methoden wie [`afterEach`](https://vitest.dev/api/#aftereach) mit [`vi.restoreAllMocks()`](https://vitest.dev/api/vi.html#vi-restoreallmocks). From 3af5b89d5b1cf26e754e0c88ee79765b2e88ff06 Mon Sep 17 00:00:00 2001 From: Johannes Hoppe Date: Tue, 18 Nov 2025 02:44:12 +0100 Subject: [PATCH 03/43] WIP --- blog/2025-11-zu-vitest-migrieren/README.md | 25 ---------------------- 1 file changed, 25 deletions(-) diff --git a/blog/2025-11-zu-vitest-migrieren/README.md b/blog/2025-11-zu-vitest-migrieren/README.md index c7df3484..723bac29 100644 --- a/blog/2025-11-zu-vitest-migrieren/README.md +++ b/blog/2025-11-zu-vitest-migrieren/README.md @@ -552,31 +552,6 @@ Du erzeugst weiterhin deine Komponenten oder Services mithilfe von `TestBed`. Auch der explizite Aufruf von `fixture.detectChanges()` ist unverändert notwendig, um die Change Detection manuell anzustoßen. - -## Vitests Browser‑Modus: Emulation, Partial, Full - - - -Vitest kann Tests **in Node mit emuliertem DOM** oder **im echten Browser** ausführen. -Hier eine kurze Einordnung: - -### Emulierter DOM (Node + jsdom) - -Im emulierten DOM-Modus laufen Tests standardmäßig in einer Node-Umgebung mit [jsdom](https://github.com/jsdom/jsdom). Dieser Modus ist sehr schnell, simuliert aber nicht vollständig das exakte Verhalten eines echten Browsers. Für die überwiegende Mehrheit klassischer Unit-Tests ist der jsdom-Modus dennoch völlig ausreichend. - -### Partial Browser Mode - -Im Partial Browser Mode laufen sowohl der Test- als auch der App-Code direkt in einer echten Browser-Umgebung, beispielsweise innerhalb einer Iframe-Session. Dabei kannst du unmittelbar auf das `document`-Objekt zugreifen oder DOM-Utilities verwenden. Ereignisse, Fokusverhalten und Timing entsprechen dabei realistischen Bedingungen. Dieser Modus ist besonders geeignet für Komponenten-Tests, wenn jsdom an seine Grenzen stößt. Der Partial Browser Mode ist zwar etwas langsamer als der jsdom-Modus, bietet aber deutlich mehr Zuverlässigkeit bei UI-Details. - -### Full Browser Mode - -Im Full Browser Mode steuern die Tests den Browser extern über eine `page`-API, ähnlich wie es bei Playwright der Fall ist. Dadurch erhältst du Zugriff auf umfassende Actionability-Checks, robuste Elementselektoren und realistisches Benutzerverhalten. Dieser Modus liefert die realistischsten Testergebnisse, ist jedoch auch schwergewichtiger und verlangt einen ausführlicheren Test-Code. Besonders gut geeignet ist der Full Browser Mode für komplexe Interaktionen wie Drag-and-Drop, Datei-Uploads oder Canvas-Manipulationen. - -### Wann solltest du welchen Modus verwenden? - -Für Tests, die reine Logik oder einfache DOM-Abfragen enthalten, ist der jsdom-Modus optimal. Möchtest du realistischere UI-Interaktionen testen, greifst du am besten zum Partial Browser Mode. Für besonders kritische UI-Fälle mit komplexen Anforderungen eignet sich der Full Browser Mode am besten. Dabei kannst du Projekte oder spezifische Teile deiner Tests gezielt in einem echten Browser laufen lassen. - - ## Bekannte Einschränkungen und Fallstricke Spezielle Karma-Anwendungsfälle wie eigene Karma-Plugins oder individuelle Browser-Launcher lassen sich erwartungsgemäß nicht direkt auf Vitest übertragen. Du wirst im Vitest Ökosystem nach Alternative suchen müssen. From f2ca58586940c8b456bfa2abc02d1a3cf1de67bf Mon Sep 17 00:00:00 2001 From: Johannes Hoppe Date: Tue, 18 Nov 2025 02:48:50 +0100 Subject: [PATCH 04/43] WIP --- blog/2025-11-zu-vitest-migrieren/README.md | 71 +++++++++------------- 1 file changed, 29 insertions(+), 42 deletions(-) diff --git a/blog/2025-11-zu-vitest-migrieren/README.md b/blog/2025-11-zu-vitest-migrieren/README.md index 723bac29..35d0f5e1 100644 --- a/blog/2025-11-zu-vitest-migrieren/README.md +++ b/blog/2025-11-zu-vitest-migrieren/README.md @@ -17,7 +17,7 @@ header: TODO.jpg Mit Angular 21 gibt es einen großen Schnitt im Unit‑Testing: Vitest ist jetzt der Standard, die langjährige Kombination aus Karma und Jasmine wird abgelöst. Beim Erzeugen eines neuen Projekts mit `ng new` fragt dich die CLI jetzt nach dem gewünschten Test‑Runner. -Vitest ist dabei die Voreinstellung. +Vitest ist dabei die Voreinstellung. Du kannst auf Wunsch weiterhin Jasmine wählen, aber für neue Projekte führt der Weg klar zu Vitest. ## Inhalt @@ -41,16 +41,10 @@ Du kannst auf Wunsch weiterhin Jasmine wählen, aber für neue Projekte führt d - [Spies und Mocks](#spies-und-mocks) - [Asynchronität ohne Zone.js aber mit Vitests](#asynchronität-ohne-zonejs-aber-mit-vitests) - [TestBed und ComponentFixture](#testbed-und-componentfixture) -- [Vitests Browser‑Modus: Emulation, Partial, Full](#vitests-browsermodus-emulation-partial-full) - - [Emulierter DOM (Node + jsdom)](#emulierter-dom-node--jsdom) - - [Partial Browser Mode](#partial-browser-mode) - - [Full Browser Mode](#full-browser-mode) - - [Wann solltest du welchen Modus verwenden?](#wann-solltest-du-welchen-modus-verwenden) - [Bekannte Einschränkungen und Fallstricke](#bekannte-einschränkungen-und-fallstricke) - [Fazit](#fazit) - ## Warum Angular Karma und Jasmine ersetzt _Karma und Jasmine_ haben für Angular lange Jahre gute Dienste geleistet, vor allem wegen der Ausführung in einem echten Browser. @@ -71,7 +65,9 @@ Kurz gesagt: Der Wechsel sorgt für Tempo, eine deutlich bessere Developer Exper -**WICHTIG:** Die Migration eines bestehenden Projekts auf Vitest gilt derzeit als **experimentell**. Dieser Prozess setzt außerdem das Application-Buildsystem voraus, das bei neu erstellten Projekten standardmäßig aktiviert ist. Wenn du eine bestehende Angular Anwendung hast, update diese zunächst mit `ng update` auf Version 21 und führe anschließend folgende Anleitung durch. +**WICHTIG:** Die Migration eines bestehenden Projekts auf Vitest gilt derzeit als **experimentell**. +Dieser Prozess setzt außerdem das Application-Buildsystem voraus, das bei neu erstellten Projekten standardmäßig aktiviert ist. +Wenn du eine bestehende Angular Anwendung hast, update diese zunächst mit `ng update` auf Version 21 und führe anschließend folgende Anleitung durch. ### Manuelle Migrationsschritte @@ -80,7 +76,7 @@ Bevor du das automatische Refactoring‑Schematic verwendest, musst du dein Proj #### 1. Abhängigkeiten installieren Installiere `vitest` sowie eine DOM‑Emulationsbibliothek. -Obwohl Tests weiterhin im Browser ausgeführt werden können (siehe [chritt 5), verwendet Vitest standardmäßig eine DOM‑Emulation, um eine Browserumgebung in Node.js zu simulieren und Tests schneller auszuführen. +Obwohl Tests weiterhin im Browser ausgeführt werden können (siehe Schritt 5), verwendet Vitest standardmäßig eine DOM‑Emulation, um eine Browserumgebung in Node.js zu simulieren und Tests schneller auszuführen. Die CLI erkennt automatisch `happy-dom`, falls es installiert ist; ansonsten greift sie auf `jsdom` zurück. Eines der beiden Pakete muss vorhanden sein. @@ -106,13 +102,15 @@ Suche in deiner `angular.json` den `test`‑Target deines Projekts und setze den } ``` -Der `unit-test`‑Builder verwendet standardmäßig `"tsConfig": "tsconfig.spec.json"` und `"buildTarget": "::development"`. Falls dein Projekt andere Werte benötigt, etwa weil die `development`‑Konfiguration fehlt oder spezielle Test‑Einstellungen nötig sind, kannst du eine eigene `testing`‑ oder ähnlich benannte Build‑Konfiguration anlegen und zuweisen. +Der `unit-test`‑Builder verwendet standardmäßig `"tsConfig": "tsconfig.spec.json"` und `"buildTarget": "::development"`. +Falls dein Projekt andere Werte benötigt, etwa weil die `development`‑Konfiguration fehlt oder spezielle Test‑Einstellungen nötig sind, kannst du eine eigene `testing`‑ oder ähnlich benannte Build‑Konfiguration anlegen und zuweisen. Der vorherige Builder `@angular/build:karma` erlaubte es, Build‑Optionen (wie `polyfills`, `assets`, `styles`) direkt im `test`‑Target zu definieren. Der neue Builder `@angular/build:unit-test` unterstützt das nicht. Falls sich deine Test‑Build‑Optionen von der `development`‑Konfiguration unterscheiden, musst du diese Optionen in eine eigene Build‑Konfiguration verschieben. Stimmen sie bereits mit `development` überein, ist kein weiterer Schritt notwendig. -> **Tipp:** Alternativ kannst du einfach ein neues Projekt mittels `ng new` erzeugen und die relevanten Abschnitte aus der neu generierten `angular.json` in dein bestehendes Projekt übernehmen. So erhältst du automatisch eine saubere Vorlage für die Vitest-Konfiguration. +> **Tipp:** Alternativ kannst du einfach ein neues Projekt mittels `ng new` erzeugen und die relevanten Abschnitte aus der neu generierten `angular.json` in dein bestehendes Projekt übernehmen. +> So erhältst du automatisch eine saubere Vorlage für die Vitest-Konfiguration. #### 3. Eigene `karma.conf.js`‑Konfiguration berücksichtigen @@ -131,7 +129,8 @@ Weitere Einstellungen findest du in der offiziellen [Vitest‑Dokumentation](htt #### 4. Karma- und `test.ts`‑Dateien entfernen -Du kannst nun `karma.conf.js` sowie `src/test.ts` löschen und alle Karma‑bezogenen Pakete deinstallieren. Die folgenden Befehle entsprechen einem Standard‑Angular‑Projekt; in deinem Projekt können weitere Pakete vorhanden sein. +Du kannst nun `karma.conf.js` sowie `src/test.ts` löschen und alle Karma‑bezogenen Pakete deinstallieren. +Die folgenden Befehle entsprechen einem Standard‑Angular‑Projekt; in deinem Projekt können weitere Pakete vorhanden sein. ```bash npm uninstall karma karma-chrome-launcher karma-coverage karma-jasmine karma-jasmine-html-reporter @@ -200,7 +199,11 @@ Das Schematic führt folgende Umwandlungen in `.spec.ts`‑Dateien durch: * Tests mit `done`-Callback werden in `async`/`await`-Tests umgeschrieben -Das Schematic führt bestimmte Aufgaben bewusst nicht durch. Es installiert weder Vitest noch andere erforderliche Abhängigkeiten. Außerdem nimmt es keine Änderungen an der `angular.json` vor, um den Vitest‑Builder zu aktivieren. Ebenso entfernt es keine Karma‑Dateien aus dem Projekt. Schließlich konvertiert das Schematic auch keine komplexen Spy‑Szenarien, die daher weiterhin manuell überarbeitet werden müssen. +Das Schematic führt bestimmte Aufgaben bewusst nicht durch. +Es installiert weder Vitest noch andere erforderliche Abhängigkeiten. +Außerdem nimmt es keine Änderungen an der `angular.json` vor, um den Vitest‑Builder zu aktivieren. +Ebenso entfernt es keine Karma‑Dateien aus dem Projekt. +Schließlich konvertiert das Schematic auch keine komplexen Spy‑Szenarien, die daher weiterhin manuell überarbeitet werden müssen. #### 2. Schematic ausführen @@ -232,10 +235,12 @@ Das Schematic bietet eine Reihe von zusätzlichen Optionen: Die Angular CLI erzeugt die Vitest‑Konfiguration im Hintergrund basierend auf den Optionen in `angular.json`. -Wem die vorgesehenen Optionen nicht ausreichen, der kann eine benutzerdefinierte Konfiguration verwenden. Damit werden zwar erweiterte Optionen verfügbar, das Angular-Team bietet jedoch keinen direkten Support für die spezifischen Inhalte der Konfigurationsdatei oder darin verwendete Plugins von Drittanbietern. +Wem die vorgesehenen Optionen nicht ausreichen, der kann eine benutzerdefinierte Konfiguration verwenden. +Damit werden zwar erweiterte Optionen verfügbar, das Angular-Team bietet jedoch keinen direkten Support für die spezifischen Inhalte der Konfigurationsdatei oder darin verwendete Plugins von Drittanbietern. Die CLI überschreibt außerdem bestimmte Eigenschaften (`test.projects`, `test.include`), um einen ordnungsgemäßen Betrieb sicherzustellen. -Du kannst bei Bedarf eine eigene Vitest-Konfigurationsdatei (`vitest.config.ts`) einbinden, um weitergehende Anpassungen vorzunehmen, die über die Standardoptionen hinausgehen. Dabei gibt es zwei mögliche Wege: Entweder verweist du direkt auf eine bestimmte Konfigurationsdatei, indem du den exakten Pfad in der `angular.json` angibst: +Du kannst bei Bedarf eine eigene Vitest-Konfigurationsdatei (`vitest.config.ts`) einbinden, um weitergehende Anpassungen vorzunehmen, die über die Standardoptionen hinausgehen. +Dabei gibt es zwei mögliche Wege: Entweder verweist du direkt auf eine bestimmte Konfigurationsdatei, indem du den exakten Pfad in der `angular.json` angibst: ```json { @@ -259,33 +264,11 @@ Bei automatischer Suche setzt du `"runnerConfig": true` in der `angular.json`. Der Builder sucht dann selbstständig nach einer Datei namens `vitest-base.config.*`, zunächst im Projektverzeichnis und anschließend im Workspace-Root. So kannst du beispielsweise gemeinsame Einstellungen zentral definieren und bequem wiederverwenden. - - - - - Eine wichtige Erninnerung: Das Schematic `@schematics/angular:refactor-jasmine-vitest` arbeitet **ausschließlich am Test-Quellcode**. Es installiert keine Vitest-Abhängigkeiten und stellt auch nicht automatisch deine `angular.json` auf den Vitest-Runner um. Die Konfiguration des `unit-test`-Builders geschieht wie zuvor gezeigt über `ng update` und anschließende manuelle Anpassungen. - ## Die neue Syntax und APIs Die meisten Specs laufen unverändert, denn **TestBed, ComponentFixture & Co.** bleiben bestehen. @@ -466,7 +449,7 @@ Es eignet sich besonders gut, wenn du eine ganz bestimmte Zeitspanne simulieren Doch nicht alle Timer sind so einfach. -Manchmal besteht der Code nur aus Timer-basierten Aktionen, aber ohne zusätzliche Promises. Das folgende Beispiel inkrementiert einen Counter mehrfach – rein über Timeouts und Intervals: +Manchmal besteht der Code nur aus Timer-basierten Aktionen, aber ohne zusätzliche Promises. Das folgende Beispiel inkrementiert einen Counter mehrfach - rein über Timeouts und Intervals: ```ts // timer-sync.ts @@ -506,7 +489,8 @@ describe('startSyncSequence', () => { Hier wäre `advanceTimersByTime()` zwar möglich, aber unnötig kompliziert. `runAllTimers()` löst einfach jedes Timeout und jedes Interval aus, bis nichts mehr übrig ist. -Noch interessanter wird es, wenn Timer-Callbacks selbst wieder asynchron arbeiten – etwa durch ein `await` oder Promise-Ketten. Dann reicht `runAllTimers()` nicht mehr aus. Das folgende Beispiel zeigt ein typisches Muster aus realen Anwendungen: +Noch interessanter wird es, wenn Timer-Callbacks selbst wieder asynchron arbeiten - etwa durch ein `await` oder Promise-Ketten. +Dann reicht `runAllTimers()` nicht mehr aus. Das folgende Beispiel zeigt ein typisches Muster aus realen Anwendungen: ```ts // timer-async.ts @@ -542,7 +526,8 @@ describe('startAsyncJob', () => { }); ``` -`runAllTimersAsync()` ist damit der konsequente Ersatz für Jasmine-Szenarien, in denen `fakeAsync()` und `tick()` zusammen mit Microtask-Flushing verwendet wurden. Vitest macht das Ganze expliziter. +`runAllTimersAsync()` ist damit der konsequente Ersatz für Jasmine-Szenarien, in denen `fakeAsync()` und `tick()` zusammen mit Microtask-Flushing verwendet wurden. +Vitest macht das Ganze expliziter. ### TestBed und ComponentFixture @@ -554,9 +539,11 @@ Auch der explizite Aufruf von `fixture.detectChanges()` ist unverändert notwend ## Bekannte Einschränkungen und Fallstricke -Spezielle Karma-Anwendungsfälle wie eigene Karma-Plugins oder individuelle Browser-Launcher lassen sich erwartungsgemäß nicht direkt auf Vitest übertragen. Du wirst im Vitest Ökosystem nach Alternative suchen müssen. +Spezielle Karma-Anwendungsfälle wie eigene Karma-Plugins oder individuelle Browser-Launcher lassen sich erwartungsgemäß nicht direkt auf Vitest übertragen. +Du wirst im Vitest Ökosystem nach Alternative suchen müssen. -Bei der Umstellung auf Vitest kann eine kurze Gewöhnungsphase im Team nötig sein, da bestimmte neue API-Konzepte wie `vi.spyOn`, `vi.fn` oder Restore-Strategien zwar leicht zu erlernen sind, sich aber dennoch von Jasmine unterscheiden. Achte deshalb darauf, dass deine Tests mögliche Manipulationen an globalen Objekten vollständig aufräumen und verwende dafür idealerweise Methoden wie [`afterEach`](https://vitest.dev/api/#aftereach) mit [`vi.restoreAllMocks()`](https://vitest.dev/api/vi.html#vi-restoreallmocks). +Bei der Umstellung auf Vitest kann eine kurze Gewöhnungsphase im Team nötig sein, da bestimmte neue API-Konzepte wie `vi.spyOn`, `vi.fn` oder Restore-Strategien zwar leicht zu erlernen sind, sich aber dennoch von Jasmine unterscheiden. +Achte deshalb darauf, dass deine Tests mögliche Manipulationen an globalen Objekten vollständig aufräumen und verwende dafür idealerweise Methoden wie [`afterEach`](https://vitest.dev/api/#aftereach) mit [`vi.restoreAllMocks()`](https://vitest.dev/api/vi.html#vi-restoreallmocks). ## Fazit From f3da9acc9c69a4e95766db6d1c30b25542c05adf Mon Sep 17 00:00:00 2001 From: Johannes Hoppe Date: Tue, 18 Nov 2025 03:02:23 +0100 Subject: [PATCH 05/43] " --- blog/2025-11-zu-vitest-migrieren/README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/blog/2025-11-zu-vitest-migrieren/README.md b/blog/2025-11-zu-vitest-migrieren/README.md index 35d0f5e1..417039c3 100644 --- a/blog/2025-11-zu-vitest-migrieren/README.md +++ b/blog/2025-11-zu-vitest-migrieren/README.md @@ -9,7 +9,7 @@ keywords: - Angular 21 - Vitest - Karma - - Jamsine + - Jasmine language: de header: TODO.jpg --- @@ -53,7 +53,7 @@ Es gab aber Nachteile: die Ausführgeschwindigkeit war nie optimal und das Ökos Vitest wurde inzwischen äußerst populär und erwies sich als passende Lösung. Vitest passte vor allem am besten, weil es einen echten Browser-Modus bietet. -Ähnlich wie zuvor unter Karma können Tests dadurch in einem realen Browser mit „echtem“ DOM und echten Ereignissen ausgeführt werden. +Ähnlich wie zuvor unter Karma können Tests dadurch in einem realen Browser mit "echtem" DOM und echten Ereignissen ausgeführt werden. Der Browser-Modus von Vitest wurde ganz aktuell mit Vitest 4 im Oktober 2025 [als stabil deklariert](https://vitest.dev/blog/vitest-4.html#browser-mode-is-stable). Gleichzeitig ist Vitest schnell und modern: Es baut auf [Vite](https://vite.dev/) auf, ist ESM- und TypeScript-first und sorgt so für äußerst kurze Start- und Wiederholungszeiten. Dazu kommt eine sehr mächtige API mit Snapshot-Tests, flexiblen [Fake-Timern](https://vitest.dev/guide/mocking/timers.html), dem wirklich nützlichen Helfer [`expect.poll`](https://vitest.dev/api/expect.html#poll), [Test-Fixtures](https://vitest.dev/guide/test-context) und Jest-kompatiblen Matchern. From 9ce022043232ed99f1cc82aff73b65cf4dff6e86 Mon Sep 17 00:00:00 2001 From: Johannes Hoppe Date: Tue, 18 Nov 2025 10:08:47 +0100 Subject: [PATCH 06/43] Update blog/2025-11-zu-vitest-migrieren/README.md Co-authored-by: Danny Koppenhagen --- blog/2025-11-zu-vitest-migrieren/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/blog/2025-11-zu-vitest-migrieren/README.md b/blog/2025-11-zu-vitest-migrieren/README.md index 417039c3..373dbdcb 100644 --- a/blog/2025-11-zu-vitest-migrieren/README.md +++ b/blog/2025-11-zu-vitest-migrieren/README.md @@ -376,7 +376,7 @@ const onItem = jasmine.createSpy('onItem').and.returnValue(true); const onItem = vi.fn().mockName('onItem').mockReturnValue(true); ``` -### Asynchronität ohne Zone.js aber mit Vitests +### Asynchronität ohne Zone.js aber mit Vitest Timer Seit Angular 21 laufen Unit-Tests standardmäßig zoneless. Das bedeutet: Die früheren Angular-Hilfsfunktionen `waitForAsync()` und `fakeAsync()/tick()` funktionieren nicht mehr automatisch, weil sie auf Zone.js basieren. From fbaeccca906d3a7a44fc9f930734b585237fa570 Mon Sep 17 00:00:00 2001 From: Johannes Hoppe Date: Tue, 18 Nov 2025 10:13:25 +0100 Subject: [PATCH 07/43] Update blog/2025-11-zu-vitest-migrieren/README.md --- blog/2025-11-zu-vitest-migrieren/README.md | 3 --- 1 file changed, 3 deletions(-) diff --git a/blog/2025-11-zu-vitest-migrieren/README.md b/blog/2025-11-zu-vitest-migrieren/README.md index 373dbdcb..3abd7582 100644 --- a/blog/2025-11-zu-vitest-migrieren/README.md +++ b/blog/2025-11-zu-vitest-migrieren/README.md @@ -264,9 +264,6 @@ Bei automatischer Suche setzt du `"runnerConfig": true` in der `angular.json`. Der Builder sucht dann selbstständig nach einer Datei namens `vitest-base.config.*`, zunächst im Projektverzeichnis und anschließend im Workspace-Root. So kannst du beispielsweise gemeinsame Einstellungen zentral definieren und bequem wiederverwenden. -Eine wichtige Erninnerung: Das Schematic `@schematics/angular:refactor-jasmine-vitest` arbeitet **ausschließlich am Test-Quellcode**. -Es installiert keine Vitest-Abhängigkeiten und stellt auch nicht automatisch deine `angular.json` auf den Vitest-Runner um. -Die Konfiguration des `unit-test`-Builders geschieht wie zuvor gezeigt über `ng update` und anschließende manuelle Anpassungen. ## Die neue Syntax und APIs From 4c0dd6ac15087c70497605b5a95667135d85276d Mon Sep 17 00:00:00 2001 From: Johannes Hoppe Date: Tue, 18 Nov 2025 10:15:45 +0100 Subject: [PATCH 08/43] Link zu Vitest --- blog/2025-11-zu-vitest-migrieren/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/blog/2025-11-zu-vitest-migrieren/README.md b/blog/2025-11-zu-vitest-migrieren/README.md index 3abd7582..03b117ed 100644 --- a/blog/2025-11-zu-vitest-migrieren/README.md +++ b/blog/2025-11-zu-vitest-migrieren/README.md @@ -50,7 +50,7 @@ Du kannst auf Wunsch weiterhin Jasmine wählen, aber für neue Projekte führt d _Karma und Jasmine_ haben für Angular lange Jahre gute Dienste geleistet, vor allem wegen der Ausführung in einem echten Browser. Es gab aber Nachteile: die Ausführgeschwindigkeit war nie optimal und das Ökosysteme war veraltetet ([Karma ist seit 2023 deprecated](https://github.com/karma-runner/karma#karma-is-deprecated-and-is-not-accepting-new-features-or-general-bug-fixes)). Über mehrere Jahre prüfte das Angular-Team Alternativen (Jest, Web Test Runner usw.), ohne einen klaren Gewinner zu finden. -Vitest wurde inzwischen äußerst populär und erwies sich als passende Lösung. +[Vitest](https://vitest.dev/) wurde inzwischen äußerst populär und erwies sich als passende Lösung. Vitest passte vor allem am besten, weil es einen echten Browser-Modus bietet. Ähnlich wie zuvor unter Karma können Tests dadurch in einem realen Browser mit "echtem" DOM und echten Ereignissen ausgeführt werden. From 002879fae114a06044353fb84baf0ec64f1171d7 Mon Sep 17 00:00:00 2001 From: Johannes Hoppe Date: Tue, 18 Nov 2025 10:18:09 +0100 Subject: [PATCH 09/43] Update blog/2025-11-zu-vitest-migrieren/README.md --- blog/2025-11-zu-vitest-migrieren/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/blog/2025-11-zu-vitest-migrieren/README.md b/blog/2025-11-zu-vitest-migrieren/README.md index 03b117ed..c0ba1e93 100644 --- a/blog/2025-11-zu-vitest-migrieren/README.md +++ b/blog/2025-11-zu-vitest-migrieren/README.md @@ -301,7 +301,7 @@ expect(flag).toBe(false); **2) `toHaveBeenCalledOnceWith()` gibt es in Jest/Vitest nicht** -Jasmine hat einen praktischen Matcher für Spione mit der Prüfung auf "genau einmal und genau mit diesen Argumenten". +Jasmine hat einen praktischen Matcher für einen Spy mit der Prüfung auf "genau einmal und genau mit diesen Argumenten". In Jest/Vitest Core gibt es diesen Matcher leider nicht. Als Ersatz kombinierst du einfach `toHaveBeenCalledTimes(1)` mit `toHaveBeenCalledWith(...)`: From 54ab4d743e69a113b8a1a3fcb928a2fcba9a1ff6 Mon Sep 17 00:00:00 2001 From: Johannes Hoppe Date: Tue, 18 Nov 2025 10:37:35 +0100 Subject: [PATCH 10/43] toHaveBeenCalledExactlyOnceWith --- blog/2025-11-zu-vitest-migrieren/README.md | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/blog/2025-11-zu-vitest-migrieren/README.md b/blog/2025-11-zu-vitest-migrieren/README.md index c0ba1e93..e6e28004 100644 --- a/blog/2025-11-zu-vitest-migrieren/README.md +++ b/blog/2025-11-zu-vitest-migrieren/README.md @@ -287,14 +287,15 @@ Weil aber Vitest nur mit Jest kompatibel sein will, ergeben sich folgende Heraus **1) `toBeTrue()` / `toBeFalse()` gibt es in Jest/Vitest nicht** -Jasmine bringt die strikten Bool‑Matcher `toBeTrue()` und `toBeFalse()` mit. In Jest (und damit Vitest) existieren sie nicht; du verwendest stattdessen einfach `toBe(true)` bzw. `toBe(false)`. +Jasmine bringt die strikten Bool‑Matcher `toBeTrue()` und `toBeFalse()` mit. +In Jest (und damit Vitest) existieren sie nicht; du verwendest stattdessen einfach [`toBe(true)`](https://vitest.dev/api/expect.html#tobe) bzw. `toBe(false)`. ```ts // Jasmine expect(result).toBeTrue(); expect(flag).toBeFalse(); -// Jest/Vitest +// Vitest expect(result).toBe(true); expect(flag).toBe(false); ``` @@ -302,8 +303,7 @@ expect(flag).toBe(false); **2) `toHaveBeenCalledOnceWith()` gibt es in Jest/Vitest nicht** Jasmine hat einen praktischen Matcher für einen Spy mit der Prüfung auf "genau einmal und genau mit diesen Argumenten". -In Jest/Vitest Core gibt es diesen Matcher leider nicht. -Als Ersatz kombinierst du einfach `toHaveBeenCalledTimes(1)` mit `toHaveBeenCalledWith(...)`: +Als Ersatz verwendest du einfach [`toHaveBeenCalledExactlyOnceWith()`](https://vitest.dev/api/expect.html#tohavebeencalledexactlyoncewith): ```ts var book = {}; @@ -311,9 +311,8 @@ var book = {}; // Jasmine expect(spy).toHaveBeenCalledOnceWith(book); -// Jest/Vitest -expect(spy).toHaveBeenCalledTimes(1); -expect(spy).toHaveBeenCalledWith(book); +// Vitest +expect(spy).toHaveBeenCalledExactlyOnceWith(book); ``` **3) Asynchrone Matchers: `expectAsync(...)` (Jasmine) vs. `.resolves/.rejects` (Jest/Vitest)** From 533743ed8c574f76fb00c4add5e2311fe4824b11 Mon Sep 17 00:00:00 2001 From: Johannes Hoppe Date: Tue, 18 Nov 2025 14:20:00 +0100 Subject: [PATCH 11/43] --test-runner=karma @fmalcher --- blog/2025-11-zu-vitest-migrieren/README.md | 23 +++++++++++++++------- 1 file changed, 16 insertions(+), 7 deletions(-) diff --git a/blog/2025-11-zu-vitest-migrieren/README.md b/blog/2025-11-zu-vitest-migrieren/README.md index e6e28004..d701b889 100644 --- a/blog/2025-11-zu-vitest-migrieren/README.md +++ b/blog/2025-11-zu-vitest-migrieren/README.md @@ -14,11 +14,12 @@ language: de header: TODO.jpg --- -Mit Angular 21 gibt es einen großen Schnitt im Unit‑Testing: +Mit Angular 21 gibt es eine bedeutende Änderung im Unit‑Testing: Vitest ist jetzt der Standard, die langjährige Kombination aus Karma und Jasmine wird abgelöst. -Beim Erzeugen eines neuen Projekts mit `ng new` fragt dich die CLI jetzt nach dem gewünschten Test‑Runner. -Vitest ist dabei die Voreinstellung. -Du kannst auf Wunsch weiterhin Jasmine wählen, aber für neue Projekte führt der Weg klar zu Vitest. +Beim Erzeugen eines neuen Projekts mit `ng new` verwendet Angular 21 nun standardmäßig **Vitest** als Test-Runner. +Vitest verspricht deutlich kürzere Startzeiten, moderne Features und eine einfache Jest-kompatible API. +Besonders spannend ist dabei der echte Browser-Modus, mit dem realistische Tests ähnlich wie früher mit Karma möglich sind. +In diesem Artikel zeigen wir dir, was Vitest für dich bedeutet, wie du bestehende Angular-Projekte einfach migrieren kannst und welche Vorteile du dadurch erhältst. ## Inhalt @@ -65,9 +66,17 @@ Kurz gesagt: Der Wechsel sorgt für Tempo, eine deutlich bessere Developer Exper -**WICHTIG:** Die Migration eines bestehenden Projekts auf Vitest gilt derzeit als **experimentell**. -Dieser Prozess setzt außerdem das Application-Buildsystem voraus, das bei neu erstellten Projekten standardmäßig aktiviert ist. -Wenn du eine bestehende Angular Anwendung hast, update diese zunächst mit `ng update` auf Version 21 und führe anschließend folgende Anleitung durch. +Wenn du ein **neues Projekt** mit Angular 21 erzeugen möchtest, nutzt die Angular CLI standardmäßig den neuen Test-Runner Vitest. +Die Wahl kannst du über die Option `--test-runner` beeinflussen: +Mit `--test-runner=vitest` erhältst du die neue, schnellere und modernere Standardlösung. +Möchtest du dagegen weiterhin bei der bewährten Karma/Jasmine-Kombination bleiben, verwende die Option `--test-runner=karma`. +Ohne explizite Angabe der Option wird automatisch Vitest verwendet. + +Um ein **bestehendes Projekt** auf Angular 21 und Vitest zu migrieren, musst du zunächst das Projekt mittels `ng update` auf Version 21 aktualisieren. +Beachte dabei, dass die Migration bestehender Projekte zu Vitest aktuell noch **experimentell ist**. +Außerdem setzt dieser Prozess das Application-Buildsystem voraus, das bei neu erstellten Projekten standardmäßig aktiviert ist. +Nachdem dein Projekt auf Version 21 aktualisiert wurde, kannst du mit den folgenden Schritten fortfahren. + ### Manuelle Migrationsschritte From cfd37139fe50f9da7c0bffcf54cb6aeb7da0798e Mon Sep 17 00:00:00 2001 From: Johannes Hoppe Date: Tue, 18 Nov 2025 17:15:14 +0100 Subject: [PATCH 12/43] + header --- blog/2025-11-zu-vitest-migrieren/.gitignore | 1 + blog/2025-11-zu-vitest-migrieren/README.md | 2 +- .../angular-vitest.jpg | Bin 0 -> 304993 bytes 3 files changed, 2 insertions(+), 1 deletion(-) create mode 100644 blog/2025-11-zu-vitest-migrieren/.gitignore create mode 100644 blog/2025-11-zu-vitest-migrieren/angular-vitest.jpg diff --git a/blog/2025-11-zu-vitest-migrieren/.gitignore b/blog/2025-11-zu-vitest-migrieren/.gitignore new file mode 100644 index 00000000..ac7b2b54 --- /dev/null +++ b/blog/2025-11-zu-vitest-migrieren/.gitignore @@ -0,0 +1 @@ +*.psd \ No newline at end of file diff --git a/blog/2025-11-zu-vitest-migrieren/README.md b/blog/2025-11-zu-vitest-migrieren/README.md index d701b889..b89f39ec 100644 --- a/blog/2025-11-zu-vitest-migrieren/README.md +++ b/blog/2025-11-zu-vitest-migrieren/README.md @@ -11,7 +11,7 @@ keywords: - Karma - Jasmine language: de -header: TODO.jpg +header: angular-vitest.jpg --- Mit Angular 21 gibt es eine bedeutende Änderung im Unit‑Testing: diff --git a/blog/2025-11-zu-vitest-migrieren/angular-vitest.jpg b/blog/2025-11-zu-vitest-migrieren/angular-vitest.jpg new file mode 100644 index 0000000000000000000000000000000000000000..2070ea717f1243e7b05c83a88f8b1ad6e91007ce GIT binary patch literal 304993 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 z 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%0DQ2RrV{m9p&AlFATkO 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 AN&o-= literal 0 HcmV?d00001 From b042e1231de91e80c4a4ab597be4ce6e8f532855 Mon Sep 17 00:00:00 2001 From: Johannes Hoppe Date: Tue, 18 Nov 2025 17:45:43 +0100 Subject: [PATCH 13/43] Update blog/2025-11-zu-vitest-migrieren/README.md Co-authored-by: Ferdinand Malcher --- blog/2025-11-zu-vitest-migrieren/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/blog/2025-11-zu-vitest-migrieren/README.md b/blog/2025-11-zu-vitest-migrieren/README.md index b89f39ec..7da6d81d 100644 --- a/blog/2025-11-zu-vitest-migrieren/README.md +++ b/blog/2025-11-zu-vitest-migrieren/README.md @@ -112,7 +112,7 @@ Suche in deiner `angular.json` den `test`‑Target deines Projekts und setze den ``` Der `unit-test`‑Builder verwendet standardmäßig `"tsConfig": "tsconfig.spec.json"` und `"buildTarget": "::development"`. -Falls dein Projekt andere Werte benötigt, etwa weil die `development`‑Konfiguration fehlt oder spezielle Test‑Einstellungen nötig sind, kannst du eine eigene `testing`‑ oder ähnlich benannte Build‑Konfiguration anlegen und zuweisen. +Falls dein Projekt andere Werte benötigt, etwa weil die `development`‑Konfiguration fehlt oder spezielle Test‑Einstellungen nötig sind, kannst du eine eigene Build-Konfiguration anlegen und zuweisen, z. B. `testing`. Der vorherige Builder `@angular/build:karma` erlaubte es, Build‑Optionen (wie `polyfills`, `assets`, `styles`) direkt im `test`‑Target zu definieren. Der neue Builder `@angular/build:unit-test` unterstützt das nicht. Falls sich deine Test‑Build‑Optionen von der `development`‑Konfiguration unterscheiden, musst du diese Optionen in eine eigene Build‑Konfiguration verschieben. From 4bd48e01a810522fb6b2a3392fe3aee3815861f9 Mon Sep 17 00:00:00 2001 From: Johannes Hoppe Date: Tue, 18 Nov 2025 17:45:59 +0100 Subject: [PATCH 14/43] Update blog/2025-11-zu-vitest-migrieren/README.md Co-authored-by: Ferdinand Malcher --- blog/2025-11-zu-vitest-migrieren/README.md | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/blog/2025-11-zu-vitest-migrieren/README.md b/blog/2025-11-zu-vitest-migrieren/README.md index 7da6d81d..cc66d192 100644 --- a/blog/2025-11-zu-vitest-migrieren/README.md +++ b/blog/2025-11-zu-vitest-migrieren/README.md @@ -14,12 +14,11 @@ language: de header: angular-vitest.jpg --- -Mit Angular 21 gibt es eine bedeutende Änderung im Unit‑Testing: +Mit Angular 21 gibt es eine bedeutende Änderung beim Unit‑Testing: Vitest ist jetzt der Standard, die langjährige Kombination aus Karma und Jasmine wird abgelöst. Beim Erzeugen eines neuen Projekts mit `ng new` verwendet Angular 21 nun standardmäßig **Vitest** als Test-Runner. Vitest verspricht deutlich kürzere Startzeiten, moderne Features und eine einfache Jest-kompatible API. -Besonders spannend ist dabei der echte Browser-Modus, mit dem realistische Tests ähnlich wie früher mit Karma möglich sind. -In diesem Artikel zeigen wir dir, was Vitest für dich bedeutet, wie du bestehende Angular-Projekte einfach migrieren kannst und welche Vorteile du dadurch erhältst. +In diesem Artikel zeigen wir, was Vitest für dich bedeutet, wie du bestehende Angular-Projekte migrieren kannst und welche Vorteile Vitest bietet. ## Inhalt From 0e471345da659aa44b070877a0aee87beb4ba62c Mon Sep 17 00:00:00 2001 From: Johannes Hoppe Date: Tue, 18 Nov 2025 17:46:13 +0100 Subject: [PATCH 15/43] Update blog/2025-11-zu-vitest-migrieren/README.md Co-authored-by: Ferdinand Malcher --- blog/2025-11-zu-vitest-migrieren/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/blog/2025-11-zu-vitest-migrieren/README.md b/blog/2025-11-zu-vitest-migrieren/README.md index cc66d192..c87a2b68 100644 --- a/blog/2025-11-zu-vitest-migrieren/README.md +++ b/blog/2025-11-zu-vitest-migrieren/README.md @@ -113,7 +113,7 @@ Suche in deiner `angular.json` den `test`‑Target deines Projekts und setze den Der `unit-test`‑Builder verwendet standardmäßig `"tsConfig": "tsconfig.spec.json"` und `"buildTarget": "::development"`. Falls dein Projekt andere Werte benötigt, etwa weil die `development`‑Konfiguration fehlt oder spezielle Test‑Einstellungen nötig sind, kannst du eine eigene Build-Konfiguration anlegen und zuweisen, z. B. `testing`. -Der vorherige Builder `@angular/build:karma` erlaubte es, Build‑Optionen (wie `polyfills`, `assets`, `styles`) direkt im `test`‑Target zu definieren. Der neue Builder `@angular/build:unit-test` unterstützt das nicht. +Der vorherige Builder `@angular/build:karma` erlaubte es, Build‑Optionen (wie `polyfills`, `assets`, `styles`) direkt im `test`-Target zu definieren. Der neue Builder `@angular/build:unit-test` unterstützt das nicht. Falls sich deine Test‑Build‑Optionen von der `development`‑Konfiguration unterscheiden, musst du diese Optionen in eine eigene Build‑Konfiguration verschieben. Stimmen sie bereits mit `development` überein, ist kein weiterer Schritt notwendig. From 9e54fd0ae13a0e64901ce2d394b051c5eb784f61 Mon Sep 17 00:00:00 2001 From: Johannes Hoppe Date: Tue, 18 Nov 2025 17:46:27 +0100 Subject: [PATCH 16/43] Update blog/2025-11-zu-vitest-migrieren/README.md Co-authored-by: Ferdinand Malcher --- blog/2025-11-zu-vitest-migrieren/README.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/blog/2025-11-zu-vitest-migrieren/README.md b/blog/2025-11-zu-vitest-migrieren/README.md index c87a2b68..b7b6b852 100644 --- a/blog/2025-11-zu-vitest-migrieren/README.md +++ b/blog/2025-11-zu-vitest-migrieren/README.md @@ -138,7 +138,8 @@ Weitere Einstellungen findest du in der offiziellen [Vitest‑Dokumentation](htt #### 4. Karma- und `test.ts`‑Dateien entfernen Du kannst nun `karma.conf.js` sowie `src/test.ts` löschen und alle Karma‑bezogenen Pakete deinstallieren. -Die folgenden Befehle entsprechen einem Standard‑Angular‑Projekt; in deinem Projekt können weitere Pakete vorhanden sein. +Die folgenden Befehle entsprechen einem Standard‑Angular‑Projekt. +In deinem Projekt können weitere Pakete vorhanden sein. ```bash npm uninstall karma karma-chrome-launcher karma-coverage karma-jasmine karma-jasmine-html-reporter From bb903006374c0d0112bbc9338727f9f8d38b1ce0 Mon Sep 17 00:00:00 2001 From: Johannes Hoppe Date: Tue, 18 Nov 2025 17:40:06 +0100 Subject: [PATCH 17/43] TOC und fixes --- blog/2025-11-zu-vitest-migrieren/README.md | 68 +++++++++++----------- 1 file changed, 34 insertions(+), 34 deletions(-) diff --git a/blog/2025-11-zu-vitest-migrieren/README.md b/blog/2025-11-zu-vitest-migrieren/README.md index b7b6b852..74bf6b3e 100644 --- a/blog/2025-11-zu-vitest-migrieren/README.md +++ b/blog/2025-11-zu-vitest-migrieren/README.md @@ -22,27 +22,27 @@ In diesem Artikel zeigen wir, was Vitest für dich bedeutet, wie du bestehende A ## Inhalt -- [Warum Angular Karma und Jasmine ersetzt](#warum-angular-karma-und-jasmine-ersetzt) -- [Migrationsleitfaden: Von Karma/Jasmine zu Vitest](#migrationsleitfaden-von-karmajasmine-zu-vitest) - - [Manuelle Migrationsschritte](#manuelle-migrationsschritte) - - [1. Abhängigkeiten installieren](#1-abhängigkeiten-installieren) - - [2. `angular.json` aktualisieren](#2-angularjson-aktualisieren) - - [3. Eigene `karma.conf.js`‑Konfiguration berücksichtigen](#3-eigene-karmaconfjskonfiguration-berücksichtigen) - - [4. Karma- und `test.ts`‑Dateien entfernen](#4-karma--und-testtsdateien-entfernen) - - [5. Browser‑Modus konfigurieren (optional)](#5-browsermodus-konfigurieren-optional) - - [Automatisches Test‑Refactoring per Schematic](#automatisches-testrefactoring-per-schematic) - - [1. Überblick](#1-überblick) - - [2. Schematic ausführen](#2-schematic-ausführen) - - [3. Nach der Migration](#3-nach-der-migration) - - [4. Benutzerdefinierten Konfiguration (optional)](#4-benutzerdefinierten-konfiguration-optional) -- [Die neue Syntax und APIs](#die-neue-syntax-und-apis) - - [Globale Funktionen](#globale-funktionen) - - [Matcher](#matcher) - - [Spies und Mocks](#spies-und-mocks) - - [Asynchronität ohne Zone.js aber mit Vitests](#asynchronität-ohne-zonejs-aber-mit-vitests) - - [TestBed und ComponentFixture](#testbed-und-componentfixture) -- [Bekannte Einschränkungen und Fallstricke](#bekannte-einschränkungen-und-fallstricke) -- [Fazit](#fazit) +- [Warum Angular Karma und Jasmine ersetzt](/blog/2025-11-zu-vitest-migrieren#warum-angular-karma-und-jasmine-ersetzt) +- [Migrationsleitfaden: Von Karma/Jasmine zu Vitest](/blog/2025-11-zu-vitest-migrieren#migrationsleitfaden-von-karmajasmine-zu-vitest) + - [Manuelle Migrationsschritte](/blog/2025-11-zu-vitest-migrieren#manuelle-migrationsschritte) + - [1. Abhängigkeiten installieren](/blog/2025-11-zu-vitest-migrieren#1-abhängigkeiten-installieren) + - [2. `angular.json` aktualisieren](/blog/2025-11-zu-vitest-migrieren#2-angularjson-aktualisieren) + - [3. Eigene `karma.conf.js`‑Konfiguration berücksichtigen](/blog/2025-11-zu-vitest-migrieren#3-eigene-karmaconfjskonfiguration-berücksichtigen) + - [4. Karma- und `test.ts`‑Dateien entfernen](/blog/2025-11-zu-vitest-migrieren#4-karma--und-testtsdateien-entfernen) + - [5. Browser‑Modus konfigurieren (optional)](/blog/2025-11-zu-vitest-migrieren#5-browsermodus-konfigurieren-optional) + - [Automatisches Test‑Refactoring per Schematic](/blog/2025-11-zu-vitest-migrieren#automatisches-testrefactoring-per-schematic) + - [1. Überblick](/blog/2025-11-zu-vitest-migrieren#1-überblick) + - [2. Schematic ausführen](/blog/2025-11-zu-vitest-migrieren#2-schematic-ausführen) + - [3. Nach der Migration](/blog/2025-11-zu-vitest-migrieren#3-nach-der-migration) + - [4. Benutzerdefinierten Konfiguration (optional)](/blog/2025-11-zu-vitest-migrieren#4-benutzerdefinierten-konfiguration-optional) +- [Die neue Syntax und APIs](/blog/2025-11-zu-vitest-migrieren#die-neue-syntax-und-apis) + - [Globale Funktionen](/blog/2025-11-zu-vitest-migrieren#globale-funktionen) + - [Matcher](/blog/2025-11-zu-vitest-migrieren#matcher) + - [Spies und Mocks](/blog/2025-11-zu-vitest-migrieren#spies-und-mocks) + - [Asynchronität ohne Zone.js aber mit Vitest Timer](/blog/2025-11-zu-vitest-migrieren#asynchronität-ohne-zonejs-aber-mit-vitest-timer) + - [TestBed und ComponentFixture](/blog/2025-11-zu-vitest-migrieren#testbed-und-componentfixture) +- [Bekannte Einschränkungen und Fallstricke](/blog/2025-11-zu-vitest-migrieren#bekannte-einschränkungen-und-fallstricke) +- [Fazit](/blog/2025-11-zu-vitest-migrieren#fazit) ## Warum Angular Karma und Jasmine ersetzt @@ -55,7 +55,7 @@ Es gab aber Nachteile: die Ausführgeschwindigkeit war nie optimal und das Ökos Vitest passte vor allem am besten, weil es einen echten Browser-Modus bietet. Ähnlich wie zuvor unter Karma können Tests dadurch in einem realen Browser mit "echtem" DOM und echten Ereignissen ausgeführt werden. Der Browser-Modus von Vitest wurde ganz aktuell mit Vitest 4 im Oktober 2025 [als stabil deklariert](https://vitest.dev/blog/vitest-4.html#browser-mode-is-stable). -Gleichzeitig ist Vitest schnell und modern: Es baut auf [Vite](https://vite.dev/) auf, ist ESM- und TypeScript-first und sorgt so für äußerst kurze Start- und Wiederholungszeiten. +Gleichzeitig ist Vitest schnell und modern: Es baut auf [Vite](https://vite.dev/) auf, ist ESM- und TypeScript-first und sorgt für äußerst kurze Start- und Wiederholungszeiten. Dazu kommt eine sehr mächtige API mit Snapshot-Tests, flexiblen [Fake-Timern](https://vitest.dev/guide/mocking/timers.html), dem wirklich nützlichen Helfer [`expect.poll`](https://vitest.dev/api/expect.html#poll), [Test-Fixtures](https://vitest.dev/guide/test-context) und Jest-kompatiblen Matchern. Nicht zuletzt ist Vitest im gesamten Frontend-Ökosystem breit akzeptiert, wodurch vorhandenes Know-how gut übertragen werden kann. Kurz gesagt: Der Wechsel sorgt für Tempo, eine deutlich bessere Developer Experience und Zukunftssicherheit und hält dabei weiterhin die Möglichkeit echter Browser-Tests offen. @@ -148,9 +148,6 @@ npm uninstall karma karma-chrome-launcher karma-coverage karma-jasmine karma-jas #### 5. Browser‑Modus konfigurieren (optional) Falls du Tests in einem echten Browser ausführen möchtest, musst du einen Browser‑Provider installieren und die `angular.json` anpassen. - -**Browser‑Provider installieren** - Wähle je nach Bedarf: * **Playwright:** `@vitest/browser-playwright` für Chromium, Firefox und WebKit @@ -161,9 +158,9 @@ Wähle je nach Bedarf: npm install --save-dev @vitest/browser-playwright ``` -**`angular.json` für Browser‑Modus erweitern** - -Füge im `test`‑Target die Option `browsers` hinzu. Der Browsername hängt vom verwendeten Provider ab (z. B. `chromium` bei Playwright). +Danach musst du noch die `angular.json` erweitern. +Füge im `test`‑Target die Option `browsers` hinzu. +Der Browsername hängt vom verwendeten Provider ab (z. B. `chromium` bei Playwright). ```json { @@ -182,18 +179,19 @@ Füge im `test`‑Target die Option `browsers` hinzu. Der Browsername hängt vom } ``` -Headless‑Modus wird automatisch aktiviert, wenn die Umgebungsvariable `CI` gesetzt ist oder der Browsername "Headless" enthält (z. B. `ChromeHeadless`). +Der Headless‑Modus wird automatisch aktiviert, wenn die Umgebungsvariable `CI` gesetzt ist oder der Browsername "Headless" enthält (z. B. `ChromeHeadless`). Andernfalls läuft der Browser sichtbar. ### Automatisches Test‑Refactoring per Schematic -**WICHTIG:** Das Schematic `refactor-jasmine-vitest` ist experimentell und deckt nicht alle Pattern ab. Überprüfe die Änderungen immer manuell. - Das Angular CLI stellt ein Schematic bereit, das deine Jasmine‑Tests automatisch auf Vitest umstellt. +**WICHTIG:** Das Schematic `refactor-jasmine-vitest` ist experimentell und deckt nicht alle Pattern ab. +Überprüfe die Änderungen immer manuell. + #### 1. Überblick -Das Schematic führt folgende Umwandlungen in `.spec.ts`‑Dateien durch: +Derzeit führt das Schematic folgende Umwandlungen in den `.spec.ts`‑Dateien durch: * `fit`/`fdescribe` → `it.only`/`describe.only` * `xit`/`xdescribe` → `it.skip`/`describe.skip` @@ -213,6 +211,7 @@ Es installiert weder Vitest noch andere erforderliche Abhängigkeiten. Außerdem nimmt es keine Änderungen an der `angular.json` vor, um den Vitest‑Builder zu aktivieren. Ebenso entfernt es keine Karma‑Dateien aus dem Projekt. Schließlich konvertiert das Schematic auch keine komplexen Spy‑Szenarien, die daher weiterhin manuell überarbeitet werden müssen. +Die manuelle Umstellung (wie oben beschrieben) bleibt uns leider nicht erspart. #### 2. Schematic ausführen @@ -230,7 +229,7 @@ Das Schematic bietet eine Reihe von zusätzlichen Optionen: | `--project ` | Wählt ein bestimmtes Projekt in einem Workspace aus. | | `--include ` | Beschränkt das Refactoring auf eine Datei oder ein Verzeichnis. | | `--file-suffix` | Legt eine andere Dateiendung für Testdateien fest. | -| `--add-imports` | Fügt explizite Vitest‑Im­porte hinzu, falls Globals deaktiviert sind. | +| `--add-imports` | Fügt explizite Vitest‑Im­porte hinzu. | | `--verbose` | Aktiviert detailliertes Logging der durchgeführten Änderungen. | #### 3. Nach der Migration @@ -238,7 +237,8 @@ Das Schematic bietet eine Reihe von zusätzlichen Optionen: 1. **Tests ausführen:** Nutze `ng test`, um sicherzustellen, dass alle Tests weiterhin funktionieren. 2. **Änderungen prüfen:** Sieh dir die Anpassungen an, besonders bei komplexen Spies oder asynchronen Tests. -`ng test` führt Tests im **Watch‑Modus** aus, sofern das Terminal interaktiv ist. Auf CI läuft der Test‑Runner automatisch im Single‑Run‑Modus. +`ng test` führt Tests im **Watch‑Modus** aus, sofern das Terminal interaktiv ist. +In CI-Umgebungen führt der Test-Runner die Tests automatisch im Single-Run-Modus aus. #### 4. Benutzerdefinierten Konfiguration (optional) From c0178d50246d7e1a75da01ee2390c6eb49d530d6 Mon Sep 17 00:00:00 2001 From: Johannes Hoppe Date: Tue, 18 Nov 2025 17:47:50 +0100 Subject: [PATCH 18/43] Update blog/2025-11-zu-vitest-migrieren/README.md Co-authored-by: Ferdinand Malcher --- blog/2025-11-zu-vitest-migrieren/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/blog/2025-11-zu-vitest-migrieren/README.md b/blog/2025-11-zu-vitest-migrieren/README.md index 74bf6b3e..c699b687 100644 --- a/blog/2025-11-zu-vitest-migrieren/README.md +++ b/blog/2025-11-zu-vitest-migrieren/README.md @@ -72,7 +72,7 @@ Möchtest du dagegen weiterhin bei der bewährten Karma/Jasmine-Kombination blei Ohne explizite Angabe der Option wird automatisch Vitest verwendet. Um ein **bestehendes Projekt** auf Angular 21 und Vitest zu migrieren, musst du zunächst das Projekt mittels `ng update` auf Version 21 aktualisieren. -Beachte dabei, dass die Migration bestehender Projekte zu Vitest aktuell noch **experimentell ist**. +Beachte dabei, dass die Migration bestehender Projekte zu Vitest aktuell noch **experimentell** ist. Außerdem setzt dieser Prozess das Application-Buildsystem voraus, das bei neu erstellten Projekten standardmäßig aktiviert ist. Nachdem dein Projekt auf Version 21 aktualisiert wurde, kannst du mit den folgenden Schritten fortfahren. From f5e0fddb71e622b476e09816ac8289de97a56641 Mon Sep 17 00:00:00 2001 From: Johannes Hoppe Date: Tue, 18 Nov 2025 17:48:06 +0100 Subject: [PATCH 19/43] Update blog/2025-11-zu-vitest-migrieren/README.md Co-authored-by: Ferdinand Malcher --- blog/2025-11-zu-vitest-migrieren/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/blog/2025-11-zu-vitest-migrieren/README.md b/blog/2025-11-zu-vitest-migrieren/README.md index c699b687..9b7729ed 100644 --- a/blog/2025-11-zu-vitest-migrieren/README.md +++ b/blog/2025-11-zu-vitest-migrieren/README.md @@ -73,7 +73,7 @@ Ohne explizite Angabe der Option wird automatisch Vitest verwendet. Um ein **bestehendes Projekt** auf Angular 21 und Vitest zu migrieren, musst du zunächst das Projekt mittels `ng update` auf Version 21 aktualisieren. Beachte dabei, dass die Migration bestehender Projekte zu Vitest aktuell noch **experimentell** ist. -Außerdem setzt dieser Prozess das Application-Buildsystem voraus, das bei neu erstellten Projekten standardmäßig aktiviert ist. +Außerdem setzt dieser Prozess das `application`-Buildsystem von Angular voraus, das bei neu erstellten Projekten standardmäßig aktiviert ist. Nachdem dein Projekt auf Version 21 aktualisiert wurde, kannst du mit den folgenden Schritten fortfahren. From ec2b7d7ab416b1f9c07d7a917fb2eeaa71e886fa Mon Sep 17 00:00:00 2001 From: Johannes Hoppe Date: Tue, 18 Nov 2025 17:49:20 +0100 Subject: [PATCH 20/43] + Patterns ab --- blog/2025-11-zu-vitest-migrieren/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/blog/2025-11-zu-vitest-migrieren/README.md b/blog/2025-11-zu-vitest-migrieren/README.md index 9b7729ed..86bb1288 100644 --- a/blog/2025-11-zu-vitest-migrieren/README.md +++ b/blog/2025-11-zu-vitest-migrieren/README.md @@ -186,7 +186,7 @@ Andernfalls läuft der Browser sichtbar. Das Angular CLI stellt ein Schematic bereit, das deine Jasmine‑Tests automatisch auf Vitest umstellt. -**WICHTIG:** Das Schematic `refactor-jasmine-vitest` ist experimentell und deckt nicht alle Pattern ab. +**WICHTIG:** Das Schematic `refactor-jasmine-vitest` ist experimentell und deckt nicht alle Patterns ab. Überprüfe die Änderungen immer manuell. #### 1. Überblick From 57084d590b9c6159d2ecf22ee267741ef47973fc Mon Sep 17 00:00:00 2001 From: Johannes Hoppe Date: Tue, 18 Nov 2025 17:49:48 +0100 Subject: [PATCH 21/43] Update blog/2025-11-zu-vitest-migrieren/README.md Co-authored-by: Ferdinand Malcher --- blog/2025-11-zu-vitest-migrieren/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/blog/2025-11-zu-vitest-migrieren/README.md b/blog/2025-11-zu-vitest-migrieren/README.md index 86bb1288..771d5eaa 100644 --- a/blog/2025-11-zu-vitest-migrieren/README.md +++ b/blog/2025-11-zu-vitest-migrieren/README.md @@ -240,7 +240,7 @@ Das Schematic bietet eine Reihe von zusätzlichen Optionen: `ng test` führt Tests im **Watch‑Modus** aus, sofern das Terminal interaktiv ist. In CI-Umgebungen führt der Test-Runner die Tests automatisch im Single-Run-Modus aus. -#### 4. Benutzerdefinierten Konfiguration (optional) +#### 4. Benutzerdefinierte Konfiguration (optional) Die Angular CLI erzeugt die Vitest‑Konfiguration im Hintergrund basierend auf den Optionen in `angular.json`. From afe7e354375952eef34e8d9b9cba184c14b35fb5 Mon Sep 17 00:00:00 2001 From: Johannes Hoppe Date: Tue, 18 Nov 2025 17:50:01 +0100 Subject: [PATCH 22/43] Update blog/2025-11-zu-vitest-migrieren/README.md Co-authored-by: Ferdinand Malcher --- blog/2025-11-zu-vitest-migrieren/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/blog/2025-11-zu-vitest-migrieren/README.md b/blog/2025-11-zu-vitest-migrieren/README.md index 771d5eaa..d9193700 100644 --- a/blog/2025-11-zu-vitest-migrieren/README.md +++ b/blog/2025-11-zu-vitest-migrieren/README.md @@ -268,7 +268,7 @@ Dabei gibt es zwei mögliche Wege: Entweder verweist du direkt auf eine bestimmt } ``` -Oder du lässt die Angular CLI automatisch suchen. +Alternativ kannst du die Angular CLI automatisch suchen lassen. Bei automatischer Suche setzt du `"runnerConfig": true` in der `angular.json`. Der Builder sucht dann selbstständig nach einer Datei namens `vitest-base.config.*`, zunächst im Projektverzeichnis und anschließend im Workspace-Root. So kannst du beispielsweise gemeinsame Einstellungen zentral definieren und bequem wiederverwenden. From 08cc90c694500aba602c18d6cc8d36b41ac24ceb Mon Sep 17 00:00:00 2001 From: Johannes Hoppe Date: Tue, 18 Nov 2025 17:50:46 +0100 Subject: [PATCH 23/43] Danke --- blog/2025-11-zu-vitest-migrieren/README.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/blog/2025-11-zu-vitest-migrieren/README.md b/blog/2025-11-zu-vitest-migrieren/README.md index d9193700..ef98e738 100644 --- a/blog/2025-11-zu-vitest-migrieren/README.md +++ b/blog/2025-11-zu-vitest-migrieren/README.md @@ -558,3 +558,7 @@ Die Umstellung ist meist unkompliziert, die Migrations‑Schematics helfen beim Wo früher `fakeAsync` und Zone.js‑Magie nötig waren, reichen heute `async/await` und flexible Fake‑Timer. Und wenn es realistisch sein muss, steht dir der Browser‑Modus zur Verfügung. Insgesamt bedeutet das: kürzere Feedback‑Schleifen, robustere Tests und weniger Reibung im Alltag. Viel Spaß beim Testen! + +
+ +Vielen Dank an Ferdinand Malcher und Danny Koppenhagen für das Review und das wertvolle Feedback! From ae2a10a6c12964e510f397de8abd52c46289e7ca Mon Sep 17 00:00:00 2001 From: Johannes Hoppe Date: Tue, 18 Nov 2025 17:51:10 +0100 Subject: [PATCH 24/43] Update blog/2025-11-zu-vitest-migrieren/README.md Co-authored-by: Ferdinand Malcher --- blog/2025-11-zu-vitest-migrieren/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/blog/2025-11-zu-vitest-migrieren/README.md b/blog/2025-11-zu-vitest-migrieren/README.md index ef98e738..305e0bc4 100644 --- a/blog/2025-11-zu-vitest-migrieren/README.md +++ b/blog/2025-11-zu-vitest-migrieren/README.md @@ -235,7 +235,7 @@ Das Schematic bietet eine Reihe von zusätzlichen Optionen: #### 3. Nach der Migration 1. **Tests ausführen:** Nutze `ng test`, um sicherzustellen, dass alle Tests weiterhin funktionieren. -2. **Änderungen prüfen:** Sieh dir die Anpassungen an, besonders bei komplexen Spies oder asynchronen Tests. +2. **Änderungen prüfen:** Sieh dir die Anpassungen an, besonders bei komplexen Spys oder asynchronen Tests. `ng test` führt Tests im **Watch‑Modus** aus, sofern das Terminal interaktiv ist. In CI-Umgebungen führt der Test-Runner die Tests automatisch im Single-Run-Modus aus. From 4970b43647b3ac1b5564307aafb6de37a9903c00 Mon Sep 17 00:00:00 2001 From: Johannes Hoppe Date: Tue, 18 Nov 2025 17:51:25 +0100 Subject: [PATCH 25/43] Update blog/2025-11-zu-vitest-migrieren/README.md Co-authored-by: Ferdinand Malcher --- blog/2025-11-zu-vitest-migrieren/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/blog/2025-11-zu-vitest-migrieren/README.md b/blog/2025-11-zu-vitest-migrieren/README.md index 305e0bc4..58bfa390 100644 --- a/blog/2025-11-zu-vitest-migrieren/README.md +++ b/blog/2025-11-zu-vitest-migrieren/README.md @@ -291,7 +291,7 @@ Dadurch vermeidest du mögliche Namenskollisionen, etwa mit gleichnamigen Funkti ### Matcher Die üblichen Matcher wie `toBe`, `toEqual`, `toContain` oder `toHaveBeenCalledWith` stehen in Vitest weiterhin zur Verfügung. Wenn du in Jasmine `jasmine.any(...)` verwendet hast, nutzt du in Vitest `expect.any(...)`. Wichtig: Vitest hat als Ziel nicht eine Kompatible API mit Jasmine, sondern bietet möglichst [**Jest‑kompatible** Expect‑API](https://vitest.dev/api/expect.html) auf Basis von Chai. -Und Jest wiederrum hat als Ziel einigermaßen mit Jasmine kompatiblel zu sein. +Das Testframework Jest hat wiederum das Ziel, einigermaßen kompatibel zu Jasmine zu sein. Weil aber Vitest nur mit Jest kompatibel sein will, ergeben sich folgende Herausforderungen, da einige Matcher schlicht fehlen: **1) `toBeTrue()` / `toBeFalse()` gibt es in Jest/Vitest nicht** From 18eb495227e8a69a5c3cd9f84fc79b86de2bdfab Mon Sep 17 00:00:00 2001 From: Johannes Hoppe Date: Tue, 18 Nov 2025 17:51:39 +0100 Subject: [PATCH 26/43] Update blog/2025-11-zu-vitest-migrieren/README.md Co-authored-by: Ferdinand Malcher --- blog/2025-11-zu-vitest-migrieren/README.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/blog/2025-11-zu-vitest-migrieren/README.md b/blog/2025-11-zu-vitest-migrieren/README.md index 58bfa390..f753078b 100644 --- a/blog/2025-11-zu-vitest-migrieren/README.md +++ b/blog/2025-11-zu-vitest-migrieren/README.md @@ -290,7 +290,9 @@ Dadurch vermeidest du mögliche Namenskollisionen, etwa mit gleichnamigen Funkti ### Matcher -Die üblichen Matcher wie `toBe`, `toEqual`, `toContain` oder `toHaveBeenCalledWith` stehen in Vitest weiterhin zur Verfügung. Wenn du in Jasmine `jasmine.any(...)` verwendet hast, nutzt du in Vitest `expect.any(...)`. Wichtig: Vitest hat als Ziel nicht eine Kompatible API mit Jasmine, sondern bietet möglichst [**Jest‑kompatible** Expect‑API](https://vitest.dev/api/expect.html) auf Basis von Chai. +Die üblichen Matcher wie `toBe`, `toEqual`, `toContain` oder `toHaveBeenCalledWith` stehen in Vitest weiterhin zur Verfügung. Wenn du in Jasmine `jasmine.any(...)` verwendet hast, nutzt du in Vitest `expect.any(...)`. +Wichtig: Vitest hat nicht das Ziel, kompatible API zu Jasmine zu schaffen. +Stattdessen bietet Vitest eine möglichst [**Jest‑kompatible** Expect‑API](https://vitest.dev/api/expect.html) auf Basis von Chai an. Das Testframework Jest hat wiederum das Ziel, einigermaßen kompatibel zu Jasmine zu sein. Weil aber Vitest nur mit Jest kompatibel sein will, ergeben sich folgende Herausforderungen, da einige Matcher schlicht fehlen: From 7122731af02d53ae5351cc8eccd31aad459b6dd5 Mon Sep 17 00:00:00 2001 From: Johannes Hoppe Date: Tue, 18 Nov 2025 17:51:49 +0100 Subject: [PATCH 27/43] Update blog/2025-11-zu-vitest-migrieren/README.md Co-authored-by: Ferdinand Malcher --- blog/2025-11-zu-vitest-migrieren/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/blog/2025-11-zu-vitest-migrieren/README.md b/blog/2025-11-zu-vitest-migrieren/README.md index f753078b..bc22183b 100644 --- a/blog/2025-11-zu-vitest-migrieren/README.md +++ b/blog/2025-11-zu-vitest-migrieren/README.md @@ -351,7 +351,7 @@ Bei asynchronen Erwartungen unterscheidet sich das Pattern sogar deutlich. Aller Daher dürfte in den meisten Projekten hier wahrscheinlich gar keine zusätzliche Arbeit anfallen. -### Spies und Mocks +### Spys und Mocks Das Spying-Konzept funktioniert nahezu identisch wie bei Jasmine, wird jedoch über das [`vi`‑Objekt bereitgestellt](https://vitest.dev/api/vi.html#vi-spyon): From b234bef5b8db4135716b9480199cc85e3a0c3521 Mon Sep 17 00:00:00 2001 From: Johannes Hoppe Date: Tue, 18 Nov 2025 17:52:07 +0100 Subject: [PATCH 28/43] Update blog/2025-11-zu-vitest-migrieren/README.md Co-authored-by: Ferdinand Malcher --- blog/2025-11-zu-vitest-migrieren/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/blog/2025-11-zu-vitest-migrieren/README.md b/blog/2025-11-zu-vitest-migrieren/README.md index bc22183b..4ebe4bf1 100644 --- a/blog/2025-11-zu-vitest-migrieren/README.md +++ b/blog/2025-11-zu-vitest-migrieren/README.md @@ -363,7 +363,7 @@ spyOn(service, 'loadData').and.returnValue(of([])); vi.spyOn(service, 'loadData').mockReturnValue(of([])); ``` -Für Spies, die bei Jasmine mit `jasmine.createSpy()` erzeugt wurden, verwendest du in Vitest jetzt einfach [`vi.fn()`](https://vitest.dev/api/vi.html#vi-fn): +Für Spys, die bei Jasmine mit `jasmine.createSpy()` erzeugt wurden, verwendest du in Vitest jetzt einfach [`vi.fn()`](https://vitest.dev/api/vi.html#vi-fn): ```ts // Jasmine From d111d7257dbfbf0c3ac92f8dab6f905691df3e9d Mon Sep 17 00:00:00 2001 From: Johannes Hoppe Date: Tue, 18 Nov 2025 17:52:20 +0100 Subject: [PATCH 29/43] Update blog/2025-11-zu-vitest-migrieren/README.md Co-authored-by: Ferdinand Malcher --- blog/2025-11-zu-vitest-migrieren/README.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/blog/2025-11-zu-vitest-migrieren/README.md b/blog/2025-11-zu-vitest-migrieren/README.md index 4ebe4bf1..9de93b1a 100644 --- a/blog/2025-11-zu-vitest-migrieren/README.md +++ b/blog/2025-11-zu-vitest-migrieren/README.md @@ -373,7 +373,9 @@ const onItem = jasmine.createSpy().and.returnValue(true); const onItem = vi.fn().mockReturnValue(true); ``` -In Jasmine kann man mit den ersten Parameter einen Namen vergeben, dies dient dazu, in Fehlermeldungen und Reports aussagekräftigere Texte anzuzeigen. (siehe [Doku](https://jasmine.github.io/api/5.12/jasmine#.createSpy)). Falls du in Vitest ebenfalls einem einen sprechenden Namen geben möchtest, kannst du dies mit `.mockName('onItem')` tun. +In Jasmine kann man mit den ersten Argument einen Namen für den Spy vergeben. +Dies dient dazu, in Fehlermeldungen und Reports aussagekräftigere Texte anzuzeigen (siehe [Doku](https://jasmine.github.io/api/5.12/jasmine#.createSpy)). +Falls du in Vitest ebenfalls einem einen sprechenden Namen geben möchtest, kannst du dies mit `.mockName('onItem')` tun. ```ts // Jasmine - mit Name From 6d7be326c476a506b125263f411c2d2b11f6cddd Mon Sep 17 00:00:00 2001 From: Johannes Hoppe Date: Tue, 18 Nov 2025 17:52:36 +0100 Subject: [PATCH 30/43] Update blog/2025-11-zu-vitest-migrieren/README.md Co-authored-by: Ferdinand Malcher --- blog/2025-11-zu-vitest-migrieren/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/blog/2025-11-zu-vitest-migrieren/README.md b/blog/2025-11-zu-vitest-migrieren/README.md index 9de93b1a..6ec1f021 100644 --- a/blog/2025-11-zu-vitest-migrieren/README.md +++ b/blog/2025-11-zu-vitest-migrieren/README.md @@ -385,7 +385,7 @@ const onItem = jasmine.createSpy('onItem').and.returnValue(true); const onItem = vi.fn().mockName('onItem').mockReturnValue(true); ``` -### Asynchronität ohne Zone.js aber mit Vitest Timer +### Asynchronität ohne Zone.js mit Vitest Timer Seit Angular 21 laufen Unit-Tests standardmäßig zoneless. Das bedeutet: Die früheren Angular-Hilfsfunktionen `waitForAsync()` und `fakeAsync()/tick()` funktionieren nicht mehr automatisch, weil sie auf Zone.js basieren. From 17046d8064b2e2a57913ffba073175aec578a2f3 Mon Sep 17 00:00:00 2001 From: Johannes Hoppe Date: Tue, 18 Nov 2025 17:52:47 +0100 Subject: [PATCH 31/43] Update blog/2025-11-zu-vitest-migrieren/README.md Co-authored-by: Ferdinand Malcher --- blog/2025-11-zu-vitest-migrieren/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/blog/2025-11-zu-vitest-migrieren/README.md b/blog/2025-11-zu-vitest-migrieren/README.md index 6ec1f021..cbbf2b47 100644 --- a/blog/2025-11-zu-vitest-migrieren/README.md +++ b/blog/2025-11-zu-vitest-migrieren/README.md @@ -390,7 +390,7 @@ const onItem = vi.fn().mockName('onItem').mockReturnValue(true); Seit Angular 21 laufen Unit-Tests standardmäßig zoneless. Das bedeutet: Die früheren Angular-Hilfsfunktionen `waitForAsync()` und `fakeAsync()/tick()` funktionieren nicht mehr automatisch, weil sie auf Zone.js basieren. Entscheidend ist: Das hat erstmal nichts mit Vitest zu tun. -Auch unter Jasmine hätte man in einer zonenlosen Umgebung auf diese Utilities verzichten müssen. +Auch unter Jasmine hätte man in einer zonenlosen Umgebung auf diese Utilitys verzichten müssen. Für einfache asynchrone Tests ersetzt man `waitForAsync()` daher durch ganz normales `async/await`, das es seit vielen Jahren auch mit Jasmine möglich ist. Folgendes Update funktioniert also unabhängig vom Test-Runner: From 0f4000de0de5f074cfd2fefa82e16dcd75ead1d8 Mon Sep 17 00:00:00 2001 From: Johannes Hoppe Date: Tue, 18 Nov 2025 17:52:57 +0100 Subject: [PATCH 32/43] Update blog/2025-11-zu-vitest-migrieren/README.md Co-authored-by: Ferdinand Malcher --- blog/2025-11-zu-vitest-migrieren/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/blog/2025-11-zu-vitest-migrieren/README.md b/blog/2025-11-zu-vitest-migrieren/README.md index cbbf2b47..f152d0e1 100644 --- a/blog/2025-11-zu-vitest-migrieren/README.md +++ b/blog/2025-11-zu-vitest-migrieren/README.md @@ -388,7 +388,7 @@ const onItem = vi.fn().mockName('onItem').mockReturnValue(true); ### Asynchronität ohne Zone.js mit Vitest Timer Seit Angular 21 laufen Unit-Tests standardmäßig zoneless. -Das bedeutet: Die früheren Angular-Hilfsfunktionen `waitForAsync()` und `fakeAsync()/tick()` funktionieren nicht mehr automatisch, weil sie auf Zone.js basieren. +Das bedeutet: Die früheren Angular-Hilfsfunktionen `waitForAsync()` und `fakeAsync()`/`tick()` funktionieren nicht mehr automatisch, weil sie auf Zone.js basieren. Entscheidend ist: Das hat erstmal nichts mit Vitest zu tun. Auch unter Jasmine hätte man in einer zonenlosen Umgebung auf diese Utilitys verzichten müssen. From 092a1ba22ec460075babdb19bbcc0d77992293b9 Mon Sep 17 00:00:00 2001 From: Johannes Hoppe Date: Tue, 18 Nov 2025 17:53:07 +0100 Subject: [PATCH 33/43] Update blog/2025-11-zu-vitest-migrieren/README.md Co-authored-by: Ferdinand Malcher --- blog/2025-11-zu-vitest-migrieren/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/blog/2025-11-zu-vitest-migrieren/README.md b/blog/2025-11-zu-vitest-migrieren/README.md index f152d0e1..e9ff4a85 100644 --- a/blog/2025-11-zu-vitest-migrieren/README.md +++ b/blog/2025-11-zu-vitest-migrieren/README.md @@ -410,7 +410,7 @@ it('should load data', async () => { }); ``` -Ggf. muss der Service für dieses Beispiel "ausgemockt" werden damit es funktioniert. +Ggf. muss der Service für dieses Beispiel "ausgemockt" werden, damit es funktioniert. Hier bleibt alles unverändert. Modern ist nur die Schreibweise bei der es zwischen Jasmine und Vitest keinen Unterschied gibt. From 7b27fc6d248fbe0cdc2b32dec8c8332ace8cc34f Mon Sep 17 00:00:00 2001 From: Johannes Hoppe Date: Tue, 18 Nov 2025 17:53:18 +0100 Subject: [PATCH 34/43] Update blog/2025-11-zu-vitest-migrieren/README.md Co-authored-by: Ferdinand Malcher --- blog/2025-11-zu-vitest-migrieren/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/blog/2025-11-zu-vitest-migrieren/README.md b/blog/2025-11-zu-vitest-migrieren/README.md index e9ff4a85..f9fd41c1 100644 --- a/blog/2025-11-zu-vitest-migrieren/README.md +++ b/blog/2025-11-zu-vitest-migrieren/README.md @@ -412,7 +412,7 @@ it('should load data', async () => { Ggf. muss der Service für dieses Beispiel "ausgemockt" werden, damit es funktioniert. Hier bleibt alles unverändert. -Modern ist nur die Schreibweise bei der es zwischen Jasmine und Vitest keinen Unterschied gibt. +Modern ist nur die Schreibweise, bei der es zwischen Jasmine und Vitest keinen Unterschied gibt. Der zweite Angular-Klassiker [`fakeAsync()`](https://angular.dev/api/core/testing/fakeAsync) und [`tick()`](https://angular.dev/api/core/testing/tick) braucht hingegen einen echten Ersatz. (Hinweis: Dieser beiden Helfer sind nicht Bestandteil von Jasmine, sondern kommen aus `@angular/core/testing`.) From 669b7f7bdd2dfba908d3e713bfa0893be293ee4e Mon Sep 17 00:00:00 2001 From: Johannes Hoppe Date: Tue, 18 Nov 2025 17:53:37 +0100 Subject: [PATCH 35/43] Update blog/2025-11-zu-vitest-migrieren/README.md Co-authored-by: Ferdinand Malcher --- blog/2025-11-zu-vitest-migrieren/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/blog/2025-11-zu-vitest-migrieren/README.md b/blog/2025-11-zu-vitest-migrieren/README.md index f9fd41c1..a98d708b 100644 --- a/blog/2025-11-zu-vitest-migrieren/README.md +++ b/blog/2025-11-zu-vitest-migrieren/README.md @@ -415,7 +415,7 @@ Hier bleibt alles unverändert. Modern ist nur die Schreibweise, bei der es zwischen Jasmine und Vitest keinen Unterschied gibt. Der zweite Angular-Klassiker [`fakeAsync()`](https://angular.dev/api/core/testing/fakeAsync) und [`tick()`](https://angular.dev/api/core/testing/tick) braucht hingegen einen echten Ersatz. -(Hinweis: Dieser beiden Helfer sind nicht Bestandteil von Jasmine, sondern kommen aus `@angular/core/testing`.) +(Hinweis: Diese beiden Helfer sind nicht Bestandteil von Jasmine, sondern kommen aus `@angular/core/testing`.) Vitest bringt ein eigenes [Fake-Timer-System](https://vitest.dev/api/vi.html#fake-timers) mit. Das ganze benötigt etwas Einarbeitung. Denn nicht jeder Timer funktioniert gleich und nicht jeder Test braucht dieselben Werkzeuge. From 806e51305e8d9537cffc11cd1d952dabf4360cc6 Mon Sep 17 00:00:00 2001 From: Johannes Hoppe Date: Tue, 18 Nov 2025 17:53:49 +0100 Subject: [PATCH 36/43] Update blog/2025-11-zu-vitest-migrieren/README.md Co-authored-by: Ferdinand Malcher --- blog/2025-11-zu-vitest-migrieren/README.md | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/blog/2025-11-zu-vitest-migrieren/README.md b/blog/2025-11-zu-vitest-migrieren/README.md index a98d708b..99f3250b 100644 --- a/blog/2025-11-zu-vitest-migrieren/README.md +++ b/blog/2025-11-zu-vitest-migrieren/README.md @@ -417,8 +417,7 @@ Modern ist nur die Schreibweise, bei der es zwischen Jasmine und Vitest keinen U Der zweite Angular-Klassiker [`fakeAsync()`](https://angular.dev/api/core/testing/fakeAsync) und [`tick()`](https://angular.dev/api/core/testing/tick) braucht hingegen einen echten Ersatz. (Hinweis: Diese beiden Helfer sind nicht Bestandteil von Jasmine, sondern kommen aus `@angular/core/testing`.) Vitest bringt ein eigenes [Fake-Timer-System](https://vitest.dev/api/vi.html#fake-timers) mit. -Das ganze benötigt etwas Einarbeitung. -Denn nicht jeder Timer funktioniert gleich und nicht jeder Test braucht dieselben Werkzeuge. +Das ganze benötigt etwas Einarbeitung, denn nicht jeder Timer funktioniert gleich und nicht jeder Test braucht dieselben Werkzeuge. Beginnen wir mit einem einfachen, Zeit-basierten Beispiel. Die folgende Funktion erhöht einen Counter nach genau fünf Sekunden: From dceeac63968e8dfa48ead5029682ecf9dd10a698 Mon Sep 17 00:00:00 2001 From: Johannes Hoppe Date: Tue, 18 Nov 2025 17:53:59 +0100 Subject: [PATCH 37/43] Update blog/2025-11-zu-vitest-migrieren/README.md Co-authored-by: Ferdinand Malcher --- blog/2025-11-zu-vitest-migrieren/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/blog/2025-11-zu-vitest-migrieren/README.md b/blog/2025-11-zu-vitest-migrieren/README.md index 99f3250b..38350446 100644 --- a/blog/2025-11-zu-vitest-migrieren/README.md +++ b/blog/2025-11-zu-vitest-migrieren/README.md @@ -418,7 +418,7 @@ Der zweite Angular-Klassiker [`fakeAsync()`](https://angular.dev/api/core/testin (Hinweis: Diese beiden Helfer sind nicht Bestandteil von Jasmine, sondern kommen aus `@angular/core/testing`.) Vitest bringt ein eigenes [Fake-Timer-System](https://vitest.dev/api/vi.html#fake-timers) mit. Das ganze benötigt etwas Einarbeitung, denn nicht jeder Timer funktioniert gleich und nicht jeder Test braucht dieselben Werkzeuge. -Beginnen wir mit einem einfachen, Zeit-basierten Beispiel. +Beginnen wir mit einem einfachen zeitbasierten Beispiel. Die folgende Funktion erhöht einen Counter nach genau fünf Sekunden: ```ts From 8174be367058bf245d4025289f5b7abf83276fbf Mon Sep 17 00:00:00 2001 From: Johannes Hoppe Date: Tue, 18 Nov 2025 17:54:07 +0100 Subject: [PATCH 38/43] Update blog/2025-11-zu-vitest-migrieren/README.md Co-authored-by: Ferdinand Malcher --- blog/2025-11-zu-vitest-migrieren/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/blog/2025-11-zu-vitest-migrieren/README.md b/blog/2025-11-zu-vitest-migrieren/README.md index 38350446..2db9085c 100644 --- a/blog/2025-11-zu-vitest-migrieren/README.md +++ b/blog/2025-11-zu-vitest-migrieren/README.md @@ -457,7 +457,7 @@ Es eignet sich besonders gut, wenn du eine ganz bestimmte Zeitspanne simulieren Doch nicht alle Timer sind so einfach. -Manchmal besteht der Code nur aus Timer-basierten Aktionen, aber ohne zusätzliche Promises. Das folgende Beispiel inkrementiert einen Counter mehrfach - rein über Timeouts und Intervals: +Manchmal besteht der Code nur aus timerbasierten Aktionen, aber ohne zusätzliche Promises. Das folgende Beispiel inkrementiert einen Counter mehrfach – rein über Timeouts und Intervals: ```ts // timer-sync.ts From 424be582c00459d50e31d64d8a547809b471cb78 Mon Sep 17 00:00:00 2001 From: Johannes Hoppe Date: Tue, 18 Nov 2025 17:54:15 +0100 Subject: [PATCH 39/43] Update blog/2025-11-zu-vitest-migrieren/README.md Co-authored-by: Ferdinand Malcher --- blog/2025-11-zu-vitest-migrieren/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/blog/2025-11-zu-vitest-migrieren/README.md b/blog/2025-11-zu-vitest-migrieren/README.md index 2db9085c..eb6dd500 100644 --- a/blog/2025-11-zu-vitest-migrieren/README.md +++ b/blog/2025-11-zu-vitest-migrieren/README.md @@ -497,7 +497,7 @@ describe('startSyncSequence', () => { Hier wäre `advanceTimersByTime()` zwar möglich, aber unnötig kompliziert. `runAllTimers()` löst einfach jedes Timeout und jedes Interval aus, bis nichts mehr übrig ist. -Noch interessanter wird es, wenn Timer-Callbacks selbst wieder asynchron arbeiten - etwa durch ein `await` oder Promise-Ketten. +Noch interessanter wird es, wenn Timer-Callbacks selbst wieder asynchron arbeiten – etwa durch ein `await` oder Promise-Ketten. Dann reicht `runAllTimers()` nicht mehr aus. Das folgende Beispiel zeigt ein typisches Muster aus realen Anwendungen: ```ts From 40ea6ea414d70c14d6a57679f2ac1ea44f40d4bf Mon Sep 17 00:00:00 2001 From: Johannes Hoppe Date: Tue, 18 Nov 2025 18:06:53 +0100 Subject: [PATCH 40/43] typos @fmalcher --- blog/2025-11-zu-vitest-migrieren/README.md | 42 +++++++++++----------- 1 file changed, 21 insertions(+), 21 deletions(-) diff --git a/blog/2025-11-zu-vitest-migrieren/README.md b/blog/2025-11-zu-vitest-migrieren/README.md index eb6dd500..a4ee98df 100644 --- a/blog/2025-11-zu-vitest-migrieren/README.md +++ b/blog/2025-11-zu-vitest-migrieren/README.md @@ -15,7 +15,7 @@ header: angular-vitest.jpg --- Mit Angular 21 gibt es eine bedeutende Änderung beim Unit‑Testing: -Vitest ist jetzt der Standard, die langjährige Kombination aus Karma und Jasmine wird abgelöst. +Vitest ist jetzt der Standard, die bisherige Standardkombination aus Karma und Jasmine wird abgelöst. Beim Erzeugen eines neuen Projekts mit `ng new` verwendet Angular 21 nun standardmäßig **Vitest** als Test-Runner. Vitest verspricht deutlich kürzere Startzeiten, moderne Features und eine einfache Jest-kompatible API. In diesem Artikel zeigen wir, was Vitest für dich bedeutet, wie du bestehende Angular-Projekte migrieren kannst und welche Vorteile Vitest bietet. @@ -34,7 +34,7 @@ In diesem Artikel zeigen wir, was Vitest für dich bedeutet, wie du bestehende A - [1. Überblick](/blog/2025-11-zu-vitest-migrieren#1-überblick) - [2. Schematic ausführen](/blog/2025-11-zu-vitest-migrieren#2-schematic-ausführen) - [3. Nach der Migration](/blog/2025-11-zu-vitest-migrieren#3-nach-der-migration) - - [4. Benutzerdefinierten Konfiguration (optional)](/blog/2025-11-zu-vitest-migrieren#4-benutzerdefinierten-konfiguration-optional) + - [4. Benutzerdefinierte Konfiguration (optional)](/blog/2025-11-zu-vitest-migrieren#4-benutzerdefinierte-konfiguration-optional) - [Die neue Syntax und APIs](/blog/2025-11-zu-vitest-migrieren#die-neue-syntax-und-apis) - [Globale Funktionen](/blog/2025-11-zu-vitest-migrieren#globale-funktionen) - [Matcher](/blog/2025-11-zu-vitest-migrieren#matcher) @@ -47,17 +47,17 @@ In diesem Artikel zeigen wir, was Vitest für dich bedeutet, wie du bestehende A ## Warum Angular Karma und Jasmine ersetzt -_Karma und Jasmine_ haben für Angular lange Jahre gute Dienste geleistet, vor allem wegen der Ausführung in einem echten Browser. -Es gab aber Nachteile: die Ausführgeschwindigkeit war nie optimal und das Ökosysteme war veraltetet ([Karma ist seit 2023 deprecated](https://github.com/karma-runner/karma#karma-is-deprecated-and-is-not-accepting-new-features-or-general-bug-fixes)). +_Karma und Jasmine_ haben für Angular lange Jahre gute Dienste geleistet, vor allem wegen der Ausführung in einem echten Browser. +Es gab aber Nachteile: die Ausführungsgeschwindigkeit war nie optimal und das Ökosystem veraltet ([Karma ist seit 2023 deprecated](https://github.com/karma-runner/karma#karma-is-deprecated-and-is-not-accepting-new-features-or-general-bug-fixes)). Über mehrere Jahre prüfte das Angular-Team Alternativen (Jest, Web Test Runner usw.), ohne einen klaren Gewinner zu finden. [Vitest](https://vitest.dev/) wurde inzwischen äußerst populär und erwies sich als passende Lösung. -Vitest passte vor allem am besten, weil es einen echten Browser-Modus bietet. -Ähnlich wie zuvor unter Karma können Tests dadurch in einem realen Browser mit "echtem" DOM und echten Ereignissen ausgeführt werden. -Der Browser-Modus von Vitest wurde ganz aktuell mit Vitest 4 im Oktober 2025 [als stabil deklariert](https://vitest.dev/blog/vitest-4.html#browser-mode-is-stable). +Vitest passte besonders gut, da es einen echten Browser-Modus bietet. +Wie zuvor bei Karma können Tests in einem realen Browser mit "echtem" DOM und echten Ereignissen ausgeführt werden. +Der Browser-Modus wurde erst kürzlich mit Vitest 4 im Oktober 2025 [als stabil deklariert](https://vitest.dev/blog/vitest-4.html#browser-mode-is-stable). Gleichzeitig ist Vitest schnell und modern: Es baut auf [Vite](https://vite.dev/) auf, ist ESM- und TypeScript-first und sorgt für äußerst kurze Start- und Wiederholungszeiten. Dazu kommt eine sehr mächtige API mit Snapshot-Tests, flexiblen [Fake-Timern](https://vitest.dev/guide/mocking/timers.html), dem wirklich nützlichen Helfer [`expect.poll`](https://vitest.dev/api/expect.html#poll), [Test-Fixtures](https://vitest.dev/guide/test-context) und Jest-kompatiblen Matchern. -Nicht zuletzt ist Vitest im gesamten Frontend-Ökosystem breit akzeptiert, wodurch vorhandenes Know-how gut übertragen werden kann. +Nicht zuletzt ist Vitest im gesamten Frontend-Ökosystem weit verbreitet, wodurch vorhandenes Know-how gut übertragen werden kann. Kurz gesagt: Der Wechsel sorgt für Tempo, eine deutlich bessere Developer Experience und Zukunftssicherheit und hält dabei weiterhin die Möglichkeit echter Browser-Tests offen. @@ -291,15 +291,16 @@ Dadurch vermeidest du mögliche Namenskollisionen, etwa mit gleichnamigen Funkti ### Matcher Die üblichen Matcher wie `toBe`, `toEqual`, `toContain` oder `toHaveBeenCalledWith` stehen in Vitest weiterhin zur Verfügung. Wenn du in Jasmine `jasmine.any(...)` verwendet hast, nutzt du in Vitest `expect.any(...)`. -Wichtig: Vitest hat nicht das Ziel, kompatible API zu Jasmine zu schaffen. +Wichtig: Vitest hat nicht das Ziel, eine zu Jasmine kompatible API zu schaffen. Stattdessen bietet Vitest eine möglichst [**Jest‑kompatible** Expect‑API](https://vitest.dev/api/expect.html) auf Basis von Chai an. Das Testframework Jest hat wiederum das Ziel, einigermaßen kompatibel zu Jasmine zu sein. Weil aber Vitest nur mit Jest kompatibel sein will, ergeben sich folgende Herausforderungen, da einige Matcher schlicht fehlen: -**1) `toBeTrue()` / `toBeFalse()` gibt es in Jest/Vitest nicht** +#### 1) `toBeTrue()` / `toBeFalse()` gibt es in Jest/Vitest nicht -Jasmine bringt die strikten Bool‑Matcher `toBeTrue()` und `toBeFalse()` mit. -In Jest (und damit Vitest) existieren sie nicht; du verwendest stattdessen einfach [`toBe(true)`](https://vitest.dev/api/expect.html#tobe) bzw. `toBe(false)`. +Jasmine bringt die strikten Bool‑Matcher `toBeTrue()` und `toBeFalse()` mit. +In Jest (und damit Vitest) existieren sie nicht. +Du kannst stattdessen einfach den Matcher [`toBe(true)`](https://vitest.dev/api/expect.html#tobe) bzw. `toBe(false)` verwenden. ```ts // Jasmine @@ -311,7 +312,7 @@ expect(result).toBe(true); expect(flag).toBe(false); ``` -**2) `toHaveBeenCalledOnceWith()` gibt es in Jest/Vitest nicht** +#### 2) `toHaveBeenCalledOnceWith()` gibt es in Jest/Vitest nicht Jasmine hat einen praktischen Matcher für einen Spy mit der Prüfung auf "genau einmal und genau mit diesen Argumenten". Als Ersatz verwendest du einfach [`toHaveBeenCalledExactlyOnceWith()`](https://vitest.dev/api/expect.html#tohavebeencalledexactlyoncewith): @@ -326,7 +327,7 @@ expect(spy).toHaveBeenCalledOnceWith(book); expect(spy).toHaveBeenCalledExactlyOnceWith(book); ``` -**3) Asynchrone Matchers: `expectAsync(...)` (Jasmine) vs. `.resolves/.rejects` (Jest/Vitest)** +#### 3) Asynchrone Matchers: `expectAsync(...)` (Jasmine) vs. `.resolves/.rejects` (Jest/Vitest) Jasmine hat eine [eigene Async‑API](https://jasmine.github.io/api/5.12/async-matchers): `await expectAsync(promise).toBeResolved() / toBeRejectedWith(...)`. Jest/Vitest nutzen stattdessen das Muster [`await expect(promise).resolves/...`](https://vitest.dev/api/expect.html#resolves) bzw. [`.rejects/...`](https://vitest.dev/api/expect.html#rejects). @@ -417,7 +418,7 @@ Modern ist nur die Schreibweise, bei der es zwischen Jasmine und Vitest keinen U Der zweite Angular-Klassiker [`fakeAsync()`](https://angular.dev/api/core/testing/fakeAsync) und [`tick()`](https://angular.dev/api/core/testing/tick) braucht hingegen einen echten Ersatz. (Hinweis: Diese beiden Helfer sind nicht Bestandteil von Jasmine, sondern kommen aus `@angular/core/testing`.) Vitest bringt ein eigenes [Fake-Timer-System](https://vitest.dev/api/vi.html#fake-timers) mit. -Das ganze benötigt etwas Einarbeitung, denn nicht jeder Timer funktioniert gleich und nicht jeder Test braucht dieselben Werkzeuge. +Die Nutzung erfordert etwas Einarbeitung, denn nicht alle Timer funktionieren gleich und nicht jeder Test braucht dieselben Werkzeuge. Beginnen wir mit einem einfachen zeitbasierten Beispiel. Die folgende Funktion erhöht einen Counter nach genau fünf Sekunden: @@ -534,8 +535,7 @@ describe('startAsyncJob', () => { }); ``` -`runAllTimersAsync()` ist damit der konsequente Ersatz für Jasmine-Szenarien, in denen `fakeAsync()` und `tick()` zusammen mit Microtask-Flushing verwendet wurden. -Vitest macht das Ganze expliziter. +`runAllTimersAsync()` ist damit ein guter Ersatz für Jasmine-Szenarien, bei denen `fakeAsync()` und `tick()` in Kombination mit Microtask-Flushing verwendet wurden. ### TestBed und ComponentFixture @@ -547,16 +547,16 @@ Auch der explizite Aufruf von `fixture.detectChanges()` ist unverändert notwend ## Bekannte Einschränkungen und Fallstricke -Spezielle Karma-Anwendungsfälle wie eigene Karma-Plugins oder individuelle Browser-Launcher lassen sich erwartungsgemäß nicht direkt auf Vitest übertragen. -Du wirst im Vitest Ökosystem nach Alternative suchen müssen. +Spezielle Karma-Anwendungsfälle wie eigene Karma-Plugins oder individuelle Browser‑Launcher lassen sich erwartungsgemäß nicht direkt auf Vitest übertragen. +Du wirst im Vitest-Ökosystem nach Alternativen suchen müssen. -Bei der Umstellung auf Vitest kann eine kurze Gewöhnungsphase im Team nötig sein, da bestimmte neue API-Konzepte wie `vi.spyOn`, `vi.fn` oder Restore-Strategien zwar leicht zu erlernen sind, sich aber dennoch von Jasmine unterscheiden. +Bei der Umstellung auf Vitest kann eine kurze Gewöhnungsphase im Team nötig sein, da bestimmte neue API-Konzepte wie `vi.spyOn`, `vi.fn` oder Strategien zum Zurücksetzen von Mocks zwar leicht zu erlernen sind, sich aber dennoch von Jasmine unterscheiden. Achte deshalb darauf, dass deine Tests mögliche Manipulationen an globalen Objekten vollständig aufräumen und verwende dafür idealerweise Methoden wie [`afterEach`](https://vitest.dev/api/#aftereach) mit [`vi.restoreAllMocks()`](https://vitest.dev/api/vi.html#vi-restoreallmocks). ## Fazit -Mit Vitest als Standard in Angular 21 wird das Testen spürbar moderner und schneller. +Mit Vitest als Standard in Angular 21 wird das Testen deutlich moderner und schneller. Die Umstellung ist meist unkompliziert, die Migrations‑Schematics helfen beim Einstieg. Wo früher `fakeAsync` und Zone.js‑Magie nötig waren, reichen heute `async/await` und flexible Fake‑Timer. Und wenn es realistisch sein muss, steht dir der Browser‑Modus zur Verfügung. From 9e14c24103c0a2dcc9999294e692571e7c32289e Mon Sep 17 00:00:00 2001 From: Johannes Hoppe Date: Tue, 18 Nov 2025 18:08:30 +0100 Subject: [PATCH 41/43] gitignore *.psd --- .gitignore | 1 + blog/2025-11-zu-vitest-migrieren/.gitignore | 1 - 2 files changed, 1 insertion(+), 1 deletion(-) delete mode 100644 blog/2025-11-zu-vitest-migrieren/.gitignore diff --git a/.gitignore b/.gitignore index e77e4c75..5c9ecb24 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,4 @@ /node_modules/ /.DS_Store .DS_Store +*.psd \ No newline at end of file diff --git a/blog/2025-11-zu-vitest-migrieren/.gitignore b/blog/2025-11-zu-vitest-migrieren/.gitignore deleted file mode 100644 index ac7b2b54..00000000 --- a/blog/2025-11-zu-vitest-migrieren/.gitignore +++ /dev/null @@ -1 +0,0 @@ -*.psd \ No newline at end of file From 2a49199df56fe55369dd76b5ee6a986c8a606df3 Mon Sep 17 00:00:00 2001 From: Johannes Hoppe Date: Tue, 18 Nov 2025 19:42:20 +0100 Subject: [PATCH 42/43] 2x Gedankenstrich weg --- blog/2025-11-zu-vitest-migrieren/README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/blog/2025-11-zu-vitest-migrieren/README.md b/blog/2025-11-zu-vitest-migrieren/README.md index a4ee98df..1c0bb8a6 100644 --- a/blog/2025-11-zu-vitest-migrieren/README.md +++ b/blog/2025-11-zu-vitest-migrieren/README.md @@ -458,7 +458,7 @@ Es eignet sich besonders gut, wenn du eine ganz bestimmte Zeitspanne simulieren Doch nicht alle Timer sind so einfach. -Manchmal besteht der Code nur aus timerbasierten Aktionen, aber ohne zusätzliche Promises. Das folgende Beispiel inkrementiert einen Counter mehrfach – rein über Timeouts und Intervals: +Manchmal besteht der Code nur aus timerbasierten Aktionen, aber ohne zusätzliche Promises. Das folgende Beispiel inkrementiert einen Counter mehrfach, indem es ausschließlich Timeouts und Intervals nutzt: ```ts // timer-sync.ts @@ -498,7 +498,7 @@ describe('startSyncSequence', () => { Hier wäre `advanceTimersByTime()` zwar möglich, aber unnötig kompliziert. `runAllTimers()` löst einfach jedes Timeout und jedes Interval aus, bis nichts mehr übrig ist. -Noch interessanter wird es, wenn Timer-Callbacks selbst wieder asynchron arbeiten – etwa durch ein `await` oder Promise-Ketten. +Noch interessanter wird es, wenn Timer-Callbacks selbst wieder asynchron arbeiten, beispielsweise durch ein `await` oder Promise-Ketten. Dann reicht `runAllTimers()` nicht mehr aus. Das folgende Beispiel zeigt ein typisches Muster aus realen Anwendungen: ```ts From da0beb6275e78fe36f488e532a55c0436ab1d836 Mon Sep 17 00:00:00 2001 From: Ferdinand Malcher Date: Tue, 18 Nov 2025 22:02:42 +0100 Subject: [PATCH 43/43] striche --- blog/2025-11-zu-vitest-migrieren/README.md | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/blog/2025-11-zu-vitest-migrieren/README.md b/blog/2025-11-zu-vitest-migrieren/README.md index 1c0bb8a6..a7e7998b 100644 --- a/blog/2025-11-zu-vitest-migrieren/README.md +++ b/blog/2025-11-zu-vitest-migrieren/README.md @@ -14,7 +14,7 @@ language: de header: angular-vitest.jpg --- -Mit Angular 21 gibt es eine bedeutende Änderung beim Unit‑Testing: +Mit Angular 21 gibt es eine bedeutende Änderung beim Unit-Testing: Vitest ist jetzt der Standard, die bisherige Standardkombination aus Karma und Jasmine wird abgelöst. Beim Erzeugen eines neuen Projekts mit `ng new` verwendet Angular 21 nun standardmäßig **Vitest** als Test-Runner. Vitest verspricht deutlich kürzere Startzeiten, moderne Features und eine einfache Jest-kompatible API. @@ -94,7 +94,7 @@ npm install --save-dev vitest jsdom #### 2. `angular.json` aktualisieren -Suche in deiner `angular.json` den `test`‑Target deines Projekts und setze den `builder` auf `@angular/build:unit-test`. +Suche in deiner `angular.json` den `test`-Target deines Projekts und setze den `builder` auf `@angular/build:unit-test`. ```json { @@ -111,10 +111,10 @@ Suche in deiner `angular.json` den `test`‑Target deines Projekts und setze den ``` Der `unit-test`‑Builder verwendet standardmäßig `"tsConfig": "tsconfig.spec.json"` und `"buildTarget": "::development"`. -Falls dein Projekt andere Werte benötigt, etwa weil die `development`‑Konfiguration fehlt oder spezielle Test‑Einstellungen nötig sind, kannst du eine eigene Build-Konfiguration anlegen und zuweisen, z. B. `testing`. +Falls dein Projekt andere Werte benötigt, etwa weil die `development`-Konfiguration fehlt oder spezielle Test‑Einstellungen nötig sind, kannst du eine eigene Build-Konfiguration anlegen und zuweisen, z. B. `testing`. Der vorherige Builder `@angular/build:karma` erlaubte es, Build‑Optionen (wie `polyfills`, `assets`, `styles`) direkt im `test`-Target zu definieren. Der neue Builder `@angular/build:unit-test` unterstützt das nicht. -Falls sich deine Test‑Build‑Optionen von der `development`‑Konfiguration unterscheiden, musst du diese Optionen in eine eigene Build‑Konfiguration verschieben. +Falls sich deine Test‑Build‑Optionen von der `development`-Konfiguration unterscheiden, musst du diese Optionen in eine eigene Build-Konfiguration verschieben. Stimmen sie bereits mit `development` überein, ist kein weiterer Schritt notwendig. > **Tipp:** Alternativ kannst du einfach ein neues Projekt mittels `ng new` erzeugen und die relevanten Abschnitte aus der neu generierten `angular.json` in dein bestehendes Projekt übernehmen. @@ -147,19 +147,19 @@ npm uninstall karma karma-chrome-launcher karma-coverage karma-jasmine karma-jas #### 5. Browser‑Modus konfigurieren (optional) -Falls du Tests in einem echten Browser ausführen möchtest, musst du einen Browser‑Provider installieren und die `angular.json` anpassen. +Falls du Tests in einem echten Browser ausführen möchtest, musst du einen Browser-Provider installieren und die `angular.json` anpassen. Wähle je nach Bedarf: * **Playwright:** `@vitest/browser-playwright` für Chromium, Firefox und WebKit * **WebdriverIO:** `@vitest/browser-webdriverio` für Chrome, Firefox, Safari und Edge -* **Preview:** `@vitest/browser-preview` für Webcontainer‑Umgebungen wie StackBlitz +* **Preview:** `@vitest/browser-preview` für Webcontainer-Umgebungen wie StackBlitz ```bash npm install --save-dev @vitest/browser-playwright ``` Danach musst du noch die `angular.json` erweitern. -Füge im `test`‑Target die Option `browsers` hinzu. +Füge im `test`-Target die Option `browsers` hinzu. Der Browsername hängt vom verwendeten Provider ab (z. B. `chromium` bei Playwright). ```json @@ -229,7 +229,7 @@ Das Schematic bietet eine Reihe von zusätzlichen Optionen: | `--project ` | Wählt ein bestimmtes Projekt in einem Workspace aus. | | `--include ` | Beschränkt das Refactoring auf eine Datei oder ein Verzeichnis. | | `--file-suffix` | Legt eine andere Dateiendung für Testdateien fest. | -| `--add-imports` | Fügt explizite Vitest‑Im­porte hinzu. | +| `--add-imports` | Fügt explizite Vitest-Im­porte hinzu. | | `--verbose` | Aktiviert detailliertes Logging der durchgeführten Änderungen. | #### 3. Nach der Migration @@ -292,7 +292,7 @@ Dadurch vermeidest du mögliche Namenskollisionen, etwa mit gleichnamigen Funkti Die üblichen Matcher wie `toBe`, `toEqual`, `toContain` oder `toHaveBeenCalledWith` stehen in Vitest weiterhin zur Verfügung. Wenn du in Jasmine `jasmine.any(...)` verwendet hast, nutzt du in Vitest `expect.any(...)`. Wichtig: Vitest hat nicht das Ziel, eine zu Jasmine kompatible API zu schaffen. -Stattdessen bietet Vitest eine möglichst [**Jest‑kompatible** Expect‑API](https://vitest.dev/api/expect.html) auf Basis von Chai an. +Stattdessen bietet Vitest eine möglichst [**Jest‑kompatible** Expect-API](https://vitest.dev/api/expect.html) auf Basis von Chai an. Das Testframework Jest hat wiederum das Ziel, einigermaßen kompatibel zu Jasmine zu sein. Weil aber Vitest nur mit Jest kompatibel sein will, ergeben sich folgende Herausforderungen, da einige Matcher schlicht fehlen: @@ -329,7 +329,7 @@ expect(spy).toHaveBeenCalledExactlyOnceWith(book); #### 3) Asynchrone Matchers: `expectAsync(...)` (Jasmine) vs. `.resolves/.rejects` (Jest/Vitest) -Jasmine hat eine [eigene Async‑API](https://jasmine.github.io/api/5.12/async-matchers): `await expectAsync(promise).toBeResolved() / toBeRejectedWith(...)`. +Jasmine hat eine [eigene Async-API](https://jasmine.github.io/api/5.12/async-matchers): `await expectAsync(promise).toBeResolved() / toBeRejectedWith(...)`. Jest/Vitest nutzen stattdessen das Muster [`await expect(promise).resolves/...`](https://vitest.dev/api/expect.html#resolves) bzw. [`.rejects/...`](https://vitest.dev/api/expect.html#rejects). Beim Umstieg müssen diese Expectations umgeschrieben werden.