2016-09-29 89 views
2

可以使用酶的方法.simulate()定制事件。 例如:使用酶模拟自定义事件?

// Code 
<Element onFoo={someFunction}></Elements> 

// Test 
const element = shallow(<Element>); 
element.simulate('foo'); 

这是方式自定义事件应与酶进行测试或者是一个更好的方法来使用某事物像:

//Test 
const element = shallow(<Element>); 
element.props.onFoo() 

回答

2

看来,.simulate()自定义事件没有实现。目前在GitHub上,一个issue其中这个话题进行了讨论,并建议使用您所提供的第二种方法的维护者之一:

wrapper.find(Child).prop('customEvent')(fakeEvent) 
+1

感谢您的回答。只要on ..在它之前(例如onFoo),就可以在自定义事件上模拟()炒作。我只是徘徊,如果api更改会崩溃我的测试,因为我'滥用'模拟()方法,或者不是一个错误的做法,并且实现是好的。 – Frank

0

什么为我工作,试图siumlate自定义事件上这是一个组件不是顶层成分如下:

const myComponent = enzymeWrapper.find('MyComponent'); 
myComponent.node.onThingSelected({}, { thing: newThing}); 

凡myComponent的是一个阵营组成部分,onThingSelected是完全一样的命名组件上的自定义事件处理程序,newThing是预期类型的​​对象由事件处理程序。

1

但是,它不是实际上已经在当前的浅层渲染?

/* Film component */ 
render() { 
    return (
    ... 
    <FilmHeader onSearchClick={this.handleSearchClick}> 
    ... 
) 
} 

/* Test */ 
const wrapper = shallow(<Film {...props} />); 
wrapper.find('FilmHeader').simulate('searchClick'); 

虽然上述酶issue仍然是公开的。并且文档没有说明这个特性的任何明显的内容。所以也许这个问题是文档本身。

+0

上面的代码对我来说工作得很好,至少与Enzyme 3和React 16是一样的。 – dubbha

+0

@KARTHIKEYAN A.,不确定我得到你的'。,可能在之前.'编辑,你能改说吗? – dubbha