【发布时间】:2019-01-12 00:32:55
【问题描述】:
我正在尝试使用 Enzyme / Jest 为反应组件测试事件处理程序,但是我的 spy 函数从未被调用...
我的组件有一个带有 id 的 div,我正在使用它来查找 dom elem
render() {
return (
<div>
<Top
{...this.props}
/>
<div
id = 'keyboard_clickable'
onClick = {this._handleClick}
style= {styles.main}>
{this._showKeyBoard()}
</div>
<input onChange = {() => {}}/>
</div>
);
}
}
我的测试
describe('onclick function is called ...', () => {
it.only('spyOn', () => {
const spy = jest.fn()
const wrapper = shallow(
<Keyboard
_getData = { () => {} }
_erase = { () => {} }
_get_letters = { () => {} }
_createWord = { () => {} }
_modeSwitch = { () => {} }
onClick = { spy }
/>
)
wrapper.find('#keyboard_clickable').simulate('click', {
target:{
parentElement:{ id: 5 },
id:6
}
})
expect(spy).toHaveBeenCalled();
})
})
我的 HandleClick
_handleClick = e => {
let parent = e.target.parentElement;
if(e.target.id || (!isNaN(parent.id) && parent.id > 0) ) {
this.props._getData(e.target.id || e.target.parentElement.id)
this.setState({status:'ok'})
}else{
this.setState({status:'Use numbers between 2 and 9'},()=>{
return alert(this.state.status)
})
}
}
测试输出
Expected mock function to have been called, but it was not called.
【问题讨论】:
-
能否请您展示一下 Keyboard._handleClick 的作用?我怀疑它可能没有调用 Keyboard.props.onClick。
-
是的不是调用Keyboard.props._handleClick,方法是Keyboard._handleClick
-
请将其添加到您的原始帖子中,此处几乎无法阅读
-
您的 _handleClick 方法从不调用 onClick 道具。您可以测试的是状态是否正确更改并且 _getData 道具被调用
标签: reactjs testing jestjs enzyme