13.8.2023

Angular >= 14 Unit Test ohne TestBed und inject Funktion

Mit Angular 14 wurde vom Angular-Team die neue Funktion "inject" eingeführt, die es ermöglicht, Services oder andere Abhängigkeiten in einer Komponente ohne Konstruktor zu verwenden. Allerdings erfordert dies im Test das Verwenden des TestBed, um den Service nutzen zu können, was oft bei performanten Unit-Tests etwas ärgerlich ist.

Es gibt jedoch einen Workaround dafür, indem man alles aus dem @angular/core importiert und dann jest in Verbindung mit spyOn auf die inject-Funktion verwendet. Anschließend kann man einfach den providerToken überprüfen und den entsprechenden Mock oder Service als Rückgabewert zurückgeben.

// import * as core from '@angular/core';
...
jest.spyOn(core, 'inject').mockImplementation((providerToken => {
    if (providerToken === ApiService) {
        return mockApiService;
    }
}));
...

Rainer Hahnekamp hat dazu noch mal ein sehr gutes Video veröffentlicht.

Dennis

Softwareentwickler

Gitlab
Zur Übersicht

Standort Hannover

newcubator GmbH
Bödekerstraße 22
30161 Hannover

Standort Dortmund

newcubator GmbH
Westenhellweg 85-89
44137 Dortmund