Selon la documentation de Angular Testing, pour déclencher les événements à partir des tests, nous utilisons la méthode triggerEventHandler()
sur l'élément de débogage. Cette méthode prend le event name
et le object
. Maintenant, cela fonctionne si nous ajoutons les événements en utilisant le HostListener
. Par exemple: @HostListener('mousemove', ['$event'])
ou pour ajouter un événement de niveau document
, nous faisons quelque chose comme ceci @HostListener('document:mousemove', ['$event'])
.Comment déclencher des événements de niveau document à partir d'un test de jasmin Angular 2/4
Dans ma mise en œuvre actuelle de la directive, comme je ne peux pas imbriquer les HostListeners, j'ajouter les événements de niveau document
utilisant le document.addEventListener
dans un HostListener
.
code est le suivant:
@HostListener('mousedown', ['$event'])
callMouseDown(event){
if (something) {
document.addEventListener('mousemove', this.callMouseMove.bind(this));
}
}
callMouseMove(event){
// do some computations.
}
Maintenant, je veux déclencher l'événement mousemove
qui est ajouté au niveau document
de mes tests. L'implémentation actuelle de triggerEventHandler()
ne fonctionne pas, c'est-à-dire que l'écouteur n'est pas déclenché dans le test.
Comment puis-je faire fonctionner cela? Quelqu'un pourrait-il m'aider avec quelques conseils.
Edit: Ajouté Test:
it('test spec', inject([MyService], (service: MyService) =>{
x = [];
//service calls the method
service.evtEmit.subscribe(e => {
x.push(e);
});
triggerEventHandler("mousedown", {pageX: 200, pageY: 300});
triggerEventHandler("document:mousemove", {pageX: 250, pageY: 320});
// the above statement won't work.
expect(arr).toEqual({x:50, y: 20});
}));
Est-ce que cette syntaxe 'this.callMouseMove()' est correcte? – yurzui
Pouvez-vous également ajouter votre test? – yurzui
@yurzui Bonjour, j'ai mis à jour le test. et j'ai fait une erreur dans la syntaxe d'appeler la fonction que je l'ai fixée maintenant. –