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.
Standort Hannover
newcubator GmbH
Bödekerstraße 22
30161 Hannover
Standort Dortmund
newcubator GmbH
Westenhellweg 85-89
44137 Dortmund