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.
