5

Próbuję symulować zdarzenia przewijania za pomocą ReactJS i JSDOM.React.addons.TestUtils.Simulate.scroll nie działa

Początkowo próbowałem następujące:

var footer = TestUtils.findRenderedDOMComponentWithClass(Component, 'footer'); 
footer.scrollTop = 500; 
TestUtils.Simulate.scroll(footer.getDOMNode()); 
//I tried this as well, but no luck 
//TestUtils.Simulate.scroll(footer); 

Zdarzenie przewijania nie jest propagowana w ogóle. Potem już ręcznie tworzone zdarzenie i wszystko działało w porządku:

var evt = document.createEvent("HTMLEvents"); 
evt.initEvent("scroll", false, true); 
element.dispatchEvent(evt); 

Pytanie: Czy robię coś źle z TestUtils? Jak mogę to sprawić?

Alan

Odpowiedz

3

Sądząc this i this, wierzę TestUtils symuluje przewijanie pośrednictwem WheelEvent, co oznacza, że ​​potrzebuje parametru deltaY wiedzieć, jak daleko do przewijania. Że będzie wyglądać następująco:

TestUtils.Simulate.scroll(footer.getDOMNode(), { deltaY: 500 }); 
+0

To wystarczyło, dzięki @Jakemmarsh –

+0

W rzeczywistości był to fałszywy alarm. Nie działało. Wydarzenie nie było propagowane. –

4

Moja sytuacja może być inna niż PO, ale miałem problemy z podobnym problemem i trafiłem tutaj po wiele, wiele poszukiwanie. Zdałem sobie sprawę z sedna mojego problemu polegającego na tym, że TestUtils.Simulate.scroll() symuluje tylko zdarzenie przewijania wywołane przez konkretny komponent React (np. Gdy masz ustawiony overflow: scroll na tym komponencie), a nie zdarzenie przewijania wywołane przez window.

W szczególności, starałem się przetestować obsługi przewijania ja ustanowiony w klasie React tak:

componentDidMount: function() { 
    window.addEventListener('scroll', this.onScroll); 
}, 

componentWillUnmount: function() { 
    window.removeEventListener('scroll', this.onScroll); 
}, 

przetestować onScroll(), w końcu zorientowali się, że muszę symulować wysyłki zwój wydarzenie od window, takie jak to:

document.body.scrollTop = 100; 
window.dispatchEvent(new window.UIEvent('scroll', { detail: 0 })); 

To zadziałało dla mnie świetnie.

+0

To było pomocne, dzięki! –