Um einen Unit Test von einer Angular Komponente mit Abhängigkeiten (Dependencies) schreiben zu können, muss man die Abhängigkeiten unter Kontrolle bringen.
Wenn man dies nicht tut, schreibt man einen Integration-Test. Integration-Tests haben eine höhere Komplexität hat und gehen schneller kaputt.
Beipsiel einer Komponente „MyComponent“ mit einer Abhängikeit „MyService“:
export class MyComponent implements OnInit { public serviceValue; constructor( private myService: MyService, ) {} ngOnInit() { this.serviceValue = this.myService.getValue(); } }
Um in einem Jasmine Unit Test die Abhängigkeit von MyService zu kontrollieren, kann man einen Spy einsetzen, der an die die Stelle der Methode MyService::getValue gesetzt wird und die Sachen macht, die man für den Test gern hätte.
describe('MyComponent', () => { let component: MyComponent; let fixture: ComponentFixture<MyComponent>; let myService:MyService; beforeEach(async () => { await TestBed.configureTestingModule({ declarations: [MyComponent,], }).compileComponents(); }); beforeEach(() => { fixture = TestBed.createComponent(MyComponent); component = fixture.componentInstance; myService = TestBed.inject(MyService); }); it('spy should set value', () => { spyOn(myService,'getValue').and.returnValue('foo'); fixture.detectChanges(); expect(component.serviceValue).toBe('foo'); }); });
In dem Beispiel wird die Methode getValue der Klasse MyService mit einem Spy überschrieben und dem Spy mitgeteilt, dass er den Wert ‚foo‘ zurückgeben soll.