Winkel 9
Die Verwendung jasmine.createSpyObjist ideal, wenn Sie eine Komponente testen, bei der ein einfacher Service injiziert wird. Zum Beispiel: Nehmen wir an, ich habe in meiner HomeComponent einen HomeService (injiziert). Die einzige Methode im HomeService ist getAddress (). Beim Erstellen der HomeComponent-Testsuite kann ich die Komponente und den Dienst wie folgt initialisieren:
describe('Home Component', () => {
let component: HomeComponent;
let fixture: ComponentFixture<HomeComponent>;
let element: DebugElement;
let homeServiceSpy: any;
let homeService: any;
beforeEach(async(() => {
homeServiceSpy = jasmine.createSpyObj('HomeService', ['getAddress']);
TestBed.configureTestingModule({
declarations: [HomeComponent],
providers: [{ provide: HomeService, useValue: homeServiceSpy }]
})
.compileComponents()
.then(() => {
fixture = TestBed.createComponent(HomeComponent);
component = fixture.componentInstance;
element = fixture.debugElement;
homeService = TestBed.get(HomeService);
fixture.detectChanges();
});
}));
it('should be created', () => {
expect(component).toBeTruthy();
});
it("should display home address", () => {
homeService.getAddress.and.returnValue(of('1221 Hub Street'));
fixture.detectChanges();
const address = element.queryAll(By.css(".address"));
expect(address[0].nativeNode.innerText).toEqual('1221 Hub Street');
});
});
Dies ist eine einfache Möglichkeit, Ihre Komponente mit zu testen jasmine.createSpyObj. Wenn Ihr Dienst jedoch über komplexere Methoden verfügt, würde ich empfehlen, anstelle von createSpyObj einen mockService zu erstellen. Zum Beispiel:
providers: [{ provide: HomeService, useValue: MockHomeService }]
Hoffe das hilft!
andCallThrough. Es ist nicht klar dokumentiert: /