2016-03-22 7 views
0

Ich versuche einen Klick auf ein dom-Element in einer reaktiven Komponente zu simulieren und bestätige, dass auf dieser Basis ein Spion aufgerufen wird. Hier ist der relevante Teil des Tests (unter Verwendung von Karma, Mokka, chai, sinon aber ich bin mir ziemlich sicher, das ist hier irrelevant):React Test Utils - Spy wird nicht aufgerufen, wenn ein simulierter Klick ausgeführt wird -

const selectSpy = sinon.spy(); 
const component = TestUtils.renderIntoDocument(<SomeComponent onSelect={selectSpy} />); 
TestUtils.Simulate.click(TestUtils.scryRenderedDOMComponentsWithTag(component, 'li')); 
expect(selectSpy.called).to.be.ok; 

und hier ist die reagieren Komponente:

render() { 
    let { title , data, onSelect } = this.props; 
    console.log(this.props.onSelect); // This correctly logs out the spy 
    return (
     <div> 
     <ul>{data.map((row, i) => { 
      return <li onClick={this.handle.bind(this,row)} key={i}>{row.title}</li>; })} 
     </ul> 
     </div> 
    ) 
} 

handle(row) { 
    this.props.onSelect(row); 
} 

Die Testläufe aber das Ergebnis ist ein fehlgeschlagener Test mit der Meldung "Erwartet falsch, um truthy zu sein". Ich kann nicht viel falsch mit dem Code sehen - es gibt keine Fehler und mein Spion ist korrekt bestanden. Gibt es noch etwas, was ich tun muss?

Antwort

1

TestUtils.Simulate.click erwartet ein DOM-Element, aber scryRenderedDOMComponentsWithTag gibt ein Array von DOM-Elementen zurück.

Try

TestUtils.Simulate.click(TestUtils.scryRenderedDOMComponentsWithTag(component, 'li')); 

zu

TestUtils.Simulate.click(TestUtils.scryRenderedDOMComponentsWithTag(component, 'li')[0]); 
+0

geändert wird, wie es ist. Vielen Dank –