2017-07-06 99 views
1

我试图在使用Enzyme for React的单元测试中模拟onClick方法。我发现很多导游模拟一个onClick,需要一些事件e,如:模拟使用React中的酶的参数的onClick方法

handleClick(e) { 
    // Does something 
} 

.... 
<MyComponent 
onClick = {handleClick} 
></MyComponent> 

但是我希望能够模仿我的onClick不把事件作为一个参数,但需要别的东西来代替,即:

onClick = {() => handleClick(myParam)} 

我试过使用.simulate('click', [myParam]);,但它没有通过参数,因为我预期。

我该如何去模拟点击发送特定参数到处理程序?

回答

2

根据documentaton它指出:

.simulate(事件[,模拟])=>自模拟事件

参数

事件(字符串):事件名称被模拟模拟(对象 [可选]):模拟事件对象将与传递给处理程序的事件对象合并。

,所以你需要修复您的代码,并传递一个对象:

.simulate('click', {myParam}); 

您还可以看看implementaion,看看它是如何传递到事件处理程序here

simulate(event, ...args) { 
    const handler = this.prop(propFromEvent(event)); 
    if (handler) { 
     withSetStateAllowed(() => { 
     // TODO(lmr): create/use synthetic events 
     // TODO(lmr): emulate React's event propagation 
     performBatchedUpdates(this,() => { 
      handler(...args); 
     }); 
     this.root.update(); 
     }); 
    } 
    return this; 
    } 
+0

好的,这是有道理的。 '模拟事件对象'使我困惑。所以这可以只是传递给事件处理程序的任何对象? –

+0

这个修好了,谢谢! –

+0

后不能10分钟:/即将! –