2014-06-10 5 views
8

sono stato in grado di simulare eventi click utilizzando Reagire utils di prova, ma non ho potuto simulare eventi MouseEnterImpossibile simulare evento mouseEnter utilizzando Reagire prova Utils

ho aggiunto dei componenti del campione e test in jsfiddle per mostrare questo problema http://jsfiddle.net/kirana/Uf4e2/2/

var Events = React.createClass({ 
    getInitialState: function() { 
     return { 
      event: '' 
     }; 
    }, 
    clickHandler: function() { 
     this.setState({ 
      event: 'click' 
     }); 
    }, 
    mouseEnterHandler: function() { 
     this.setState({ 
      event: 'mouseenter' 
     }); 
    }, 
    render: function() { 
     return React.DOM.div(null, React.DOM.button({ 
      ref: 'button', 
      onClick: this.clickHandler, 
      onMouseEnter: this.mouseEnterHandler 
     }, 'click or mouseenter'), React.DOM.div(null, this.state.event)); 
    } 
}); 


var ReactTestUtils = React.addons.TestUtils; 

describe('Events', function() { 
    it('should have click event state', function (done) { 
     var events = Events(); 
     ReactTestUtils.renderIntoDocument(events); 
     ReactTestUtils.Simulate.click(events.refs.button.getDOMNode()); 
     events.state.event.should.equal('click'); 
     done(); 
    }); 

    // This test is failing 
    it('should have mouseenter event state', function (done) { 
     var events = Events(); 
     ReactTestUtils.renderIntoDocument(events); 
     ReactTestUtils.Simulate.mouseEnter(events.refs.button.getDOMNode()); 
     events.state.event.should.equal('mouseenter'); 
     done(); 
    }); 

}); 

non riuscivo a capire cosa mi manca per simulare mouseEnter.

risposta

11

Attualmente mouseenter/mouseleave non può essere simulato direttamente utilizzando ReactTestUtils; questa questione aperta:

https://github.com/facebook/react/issues/1297

Come una soluzione, per ora, è possibile utilizzare SimulateNative.mouseOver e SimulateNative.mouseOut (avendo cura di specificare in modo appropriato su ogni relatedTarget) e insieme causerà Reagire al fuoco onMouseEnter ed eventi onMouseLeave.

+0

Grazie Ben, questa soluzione ha funzionato per me – kiran

2

Questa risposta è un po 'diverso ora come l'evento mouseOver lavora in Reagire dal v0.11.1 - vedi here

Ciò significa che ora è possibile utilizzare

ReactTestUtils.Simulate.mouseEnter(events.refs.button.getDOMNode()); 

proprio come si è tentato nel tuo esempio.