5

Sto provando a simulare un evento di scorrimento con ReactJS e JSDOM.React.addons.TestUtils.Simulate.scroll non funziona

Inizialmente ho provato quanto segue:

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); 

L'evento di scorrimento non si propaga a tutti. Poi, ho creato manualmente l'evento e tutto ha funzionato bene:

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

Domanda: Sto facendo qualcosa di sbagliato con le TestUtils? Come posso farlo funzionare?

Alan

risposta

3

A giudicare dalla this e this, credo TestUtils simula lo scorrimento attraverso un WheelEvent, il che significa che ha bisogno di un parametro di deltaY sapere fino a scorrere. Ciò sarebbe simile a questa:

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

Questo ha fatto il trucco, grazie @Jakemmarsh –

+0

In realtà questo era un falso allarme. Non ha funzionato. L'evento non è stato propagato. –

4

La mia situazione può essere diverso da quello del PO di, ma ero alle prese con il un problema simile e ho trovato la mia strada qui dopo un sacco di ricerca. Ho capito che il nocciolo del mio problema era che TestUtils.Simulate.scroll() simula solo un evento di scorrimento inviato da un componente React specifico (ad es. Quando hai overflow: scroll impostato su quel componente) e non un evento di scorrimento inviato da window.

In particolare, stavo cercando di testare un gestore di scorrimento che avevo messo in una classe Reagire come questo:

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

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

Per provare onScroll(), ho finalmente capito che dovevo per simulare l'invio di una pergamena evento dal window, come questo:

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

che ha lavorato molto per me.

+0

Questo è stato utile, grazie! –