Angular 9
Utilisation jasmine.createSpyObj
est idéal pour tester un composant dans lequel un simple service est injecté. Par exemple : disons que dans mon composant HomeComponent, j'ai un HomeService (injecté). La seule méthode du HomeService est getAddress(). Lors de la création de la suite de tests HomeComponent, je peux initialiser le composant et le service comme suit :
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');
});
});
Il s'agit d'un moyen simple de tester votre composant à l'aide de la fonction jasmine.createSpyObj
. Cependant, si votre service a plus de méthodes et une logique plus complexe, je recommanderais de créer un mockService au lieu de createSpyObj. Par exemple, je recommande de créer un mockService au lieu de createSpyObj : providers: [{ provide: HomeService, useValue: MockHomeService }]
J'espère que cela vous aidera !
3 votes
Vous pouvez essayer de l'enchaîner avec
andCallThrough
. Il n'est pas clairement documenté :/