2017-01-24 2 views
8

ich nicht wirklich wissen, wie Inline-Funktion verspotten in der Komponente des Kindes reagierenWie e.preventDefault spotten in der Komponente des Kindes reagieren

Mein Stack: sinon, chai, enzyme;

Component Nutzung:

<ListItem onClick={() => someFn()} /> 

Bauteile machen:

render() { 
    return (
     <li> 
     <a href="#" onClick={e => { 
      e.preventDefault(); 
      this.props.onClick(); 
      }} 
     > whatever </a> 
     </li> 
    ); 
    } 

Hier haben wir onClick die e.preventDefault() nennt. Wie kann man für <a href> (link) sagen, nicht e.preventDefault() anrufen? Wie kann ich das verspotten onClick?

unter dem, was ich versuche haben in Tests:

Shallow Kopie Setup

function setup() { 
    const someFn = sinon.stub(); 

    const component = shallow(
    <ListItem 
     onClick={() => { 
     someFn(); 
     }} 
    /> 
); 

    return { 
    component: component, 
    actions: someFn, 
    link: component.find('a'), 
    listItem: component.find('li'), 
    } 
} 

Und der Test

it('simulates click events',() => { 
    const { link, actions } = setup(); 
    link.simulate('click'); //Click on <a href> 
    expect(actions).to.have.property('callCount', 1); //would be good if we'll remove e.preventDefault() 
    }); 

-Test des Ausgangsfehler:

TypeError: Cannot read property 'preventDefault' of undefined 

Antwort

19

Versuchen Sie, diese

link.simulate('click', { 
    preventDefault:() => { 
    } 
}); 
+1

Danke, Mann. Wirklich große Hilfe für mich –

+0

Froh, dir zu helfen :) – WitVault

Verwandte Themen