本文介绍了如何在React组件的子对象中模拟e.preventDefault的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我真的不知道如何在react组件的子对象中模拟内联函数

I don't really know how to mock inline function in react component's child

我的堆栈:sinonchaienzyme;

组件使用情况:

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

组件的渲染:

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

在这里,我们有一个调用e.preventDefault()onClick函数.如何告诉<a href>(link)不要调用e.preventDefault()?如何模拟onClick?

Here we have an onClick function that calls e.preventDefault(). How to tell to <a href>(link) not to call e.preventDefault()? How can I mock an onClick?

以下是我在测试中尝试过的内容:

Below is what I have tried in tests:

浅拷贝设置

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'),
  }
}

和测试

  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()
  });

测试的输出错误:

TypeError: Cannot read property 'preventDefault' of undefined

推荐答案

尝试一下

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

这篇关于如何在React组件的子对象中模拟e.preventDefault的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

10-16 10:16