GEDOPLAN
Webprogrammierung

Angular Migration zu Vitest

Webprogrammierung
vitestan png

Mit Angular Version 21 ist die Test-Bibliothek „Vitest“ nun Standard für neue Projekte und ersetzt Karma/Jasmin. Solche Art von Neuigkeiten ist oft der Schrecken für bestehende Projekt. In diesem Fall können wir uns aber (fast) bequem zurücklehnen. Bevor wir uns die Migration anschauen hier die wichtigsten Punkte, die es über Vitest zu wissen gibt:

  • Syntax sehr (sehr) ähnlich zu Jasmine
  • (im Standard) kein Test in echten Browser Instanzen (wesentlich performanter)
  • automatische Migration via CLI möglich.

Schauen wir uns an, was eine Migration bedeutet.

npm install --save-dev vitest jsdom

Installiert die benötigten Abhängigkeiten im Projekt. Zusätzlich bedarf es noch einer Anpassung der Test-Konfiguration in der Datei angular.json

        "test": {
          "builder": "@angular/build:unit-test"
        }

Ersetzt den Builder: „@angular/build:karma“, auch die dort hinterlegten Optionen können in aller Regel entfernt werden.

ng g @schematics/angular:refactor-jasmine-vitest

Führt eine automatische Migration alle Test-Fälle durch. Zumindest theoretisch. In meinem Fall hat das Hinzufügen der Import-Deklaration leider nicht funktioniert und auch das Erzeugen von Spy-Objekten (createSpyObj) scheint in der automatischen Migration nicht berücksichtigt zu werden. Schauen wir uns an einem Test die Unterschiede an:

// Jasmine
spyOn(TestBed.inject(TimeService), 'calculateDuration').and.returnValue(Duration.fromISO('PT1H'));

// Vitest (automatisch migriert)
vi.spyOn(TestBed.inject(TimeService), 'calculateDuration').mockReturnValue(Duration.fromISO('PT1H'));
// Jasmine
expect(TestBed.inject(RecordService).load).toHaveBeenCalledOnceWith();

// Vitest (automatisch migriert)
expect(TestBed.inject(RecordService).load).toHaveBeenCalledTimes(1);
expect(TestBed.inject(RecordService).load).toHaveBeenCalledWith();

// Jasmine
        const recordServiceMock = createSpyObj<RecordService>('RecordService', ['load'])
        recordServiceMock.load.and.returnValue(of([
            {...},
            {...}
        ]));

// Vitest (NICHT automatisch migriert)
    const recordServiceMock = {
      load: vi.fn().mockReturnValue(of([
        {...},
        {...}
      ]))
    }

Wie wir sehen können, ist die Umgewöhnung auf die neue Syntax eher überschaubar und dank der automatischen Migration hält sich der Umstellungswaufwand in Grenzen. Hier und da werden aber sicherlich manuelle Schritte notwenig sein, wie hier im Beispiel schon zu sehen.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Bitte füllen Sie dieses Feld aus.
Bitte füllen Sie dieses Feld aus.
Bitte gib eine gültige E-Mail-Adresse ein.
Sie müssen den Bedingungen zustimmen, um fortzufahren.

Autor

Diesen Artikel teilen

LinkedIn
Xing

Gibt es noch Fragen?

Fragen beantworten wir sehr gerne! Schreibe uns einfach per Kontaktformular.

Kurse

weitere Blogbeiträge

csv smile
Jakarta EE (Java EE), Java SE

OpenCSV

XML und JSON sind fantastische, leichtgewichtige und technisch gut zu verarbeitende Schnittstellen-Formate. Es gibt da aber ein weiteres Format, welches…
pay 937882 640
Application Server

Versionen von WildFly und JBoss EAP

In vielen unserer Seminare (z. B. https://gedoplan.de/it-schulungen/entwicklung-und-betrieb-von-anwendungen-auf-wildfly/) nutzen wir WildFly als Application Server. Unsere Kunden verwenden häufig statt der Open-Source-Distribution…

Work Life Balance. Jobs bei Gedoplan

We are looking for you!

Lust bei GEDOPLAN mitzuarbeiten? Wir suchen immer Verstärkung – egal ob Entwickler, Dozent, Trainerberater oder für unser IT-Marketing! Schau doch einfach mal auf unsere Jobseiten! Wir freuen uns auf Dich!

Work Life Balance. Jobs bei Gedoplan

We are looking for you!

Lust bei GEDOPLAN mitzuarbeiten? Wir suchen immer Verstärkung – egal ob Entwickler, Dozent, Trainerberater oder für unser IT-Marketing! Schau doch einfach mal auf unsere Jobseiten! Wir freuen uns auf Dich!