[英]How to spy a react event listener by using enzyme?
It seems to be a fairly simple task, but I can't figure out what I'm doing wrong... 这似乎是一个相当简单的任务,但我无法弄清楚自己在做什么错...
Page.jsx Page.jsx
class Page extends React.Component {
constructor(props) {
super(props);
}
handlePageClick = (e) => {
console.log('page click!!');
}
render() {
return(
<div className='at-page' onClick={this.handlePageClick}>
{this.props.children}
</div>
);
}
}
export default Page;
Page.test.js Page.test.js
...
it('page should listen for click events', () => {
const wrapper = mount(<Page><div>Hello Page</div></Page>);
const instance = wrapper.instance();
const spy = jest.spyOn(instance, 'handlePageClick');
const page = wrapper.find('.at-page');
page.prop('onClick')();
expect(spy).toHaveBeenCalled();
}
...
I'm getting... 我越来越...
expect(jest.fn()).toHaveBeenCalled()
Expected mock function to have been called.
expect(jest.fn()).toHaveBeenCalled()
Expected mock function to have been called.
I figured out what is wrong here. 我发现这里有什么问题。 Please, let me know if you have a better solution.
请让我知道您是否有更好的解决方案。
1) I should spy my function before I create my wrapper 1)在创建包装器之前,我应该监视我的函数
2) I cannot use arrow functions as methods in my class 2)我不能在课堂上使用箭头函数作为方法
Page.jsx Page.jsx
class Page extends React.Component {
constructor(props) {
super(props);
this.handlePageClick = this.handlePageClick.bind(this);
}
handlePageClick(e) {
console.log('page click!!');
}
render() {
return(
<div className='at-page' onClick={this.handlePageClick}>
{this.props.children}
</div>
);
}
}
export default Page;
Page.test.js Page.test.js
...
it('page should listen for click events', () => {
const spy = jest.spyOn(Page.prototype, 'handlePageClick');
const wrapper = mount(<Page><div>Hello Page</div></Page>);
const page = wrapper.find('.at-page');
page.prop('onClick')();
expect(spy).toHaveBeenCalled();
}
...
使用Simon库和方法存根
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.