J'ai un composant qui utilise un EventEmitter et le EventEmitter est utilisé lorsque quelqu'un est cliqué sur la page. Existe-t-il un moyen d'observer EventEmitter lors d'un test d'unité et d'utiliser TestComponentBuilder pour cliquer sur l'élément qui déclenche la méthode EventEmitter.next () et voir ce qui a été envoyé?
Votre test pourrait être:
it('should emit on click', () => {
const fixture = TestBed.createComponent(MyComponent);
// spy on event emitter
const component = fixture.componentInstance;
spyOn(component.myEventEmitter, 'emit');
// trigger the click
const nativeElement = fixture.nativeElement;
const button = nativeElement.querySelector('button');
button.dispatchEvent(new Event('click'));
fixture.detectChanges();
expect(component.myEventEmitter.emit).toHaveBeenCalledWith('hello');
});
quand votre composant est:
@Component({ ... })
class MyComponent {
@Output myEventEmitter = new EventEmitter<string>();
buttonClick() {
this.myEventEmitter.emit('hello');
}
}
Supposons que vous avez une méthode appelée buttonClick()
qui déclenche un émetteur d'événement appelé eventEmitter
, vous pouvez vous abonner à l'événement, puis appeler la méthode pour voir si l'événement se déclenche, puis appeler le rappel. done()
quand il le fait ...
@Component({ ... })
class MyComponent {
@Output() eventEmitter = new EventEmitter();
buttonClick() {
this.eventEmitter.emit('bar');
}
}
Et puis dans le test ...
it('should emit on click', (done) => {
component.eventEmitter.subscribe(foo => {
expect(foo).toEqual('bar');
done();
});
component.buttonClick();
});
Alternativement, vous pouvez utiliser un espion, cela dépend de votre style. Voici comment utiliser facilement un espion pour voir si emit
est en train de se faire virer ...
it('should emit on click', () => {
spyOn(component.eventEmitter, 'emit');
component.buttonClick();
expect(component.eventEmitter.emit).toHaveBeenCalled();
expect(component.eventEmitter.emit).toHaveBeenCalledWith('bar');
});
Vous pouvez vous abonner à l'émetteur ou le lier, s'il s'agit d'un @Output()
, dans le modèle parent et vérifier le composant parent si la liaison a été mise à jour. Vous pouvez également envoyer un événement de clic, puis l'abonnement doit être déclenché.