如何在React with Enzyme中测试由子组件回调调用的组件回调?

rfgamaral

说我有以下应用程序:

class Child extends React.Component {
    render() {
        return <button onClick={this.handleChildOnClick}>{this.props.children}</button>;
    }

    handleChildOnClick() {
        this.props.onChildClick('foo');
    }
}

class Parent extends React.Component {
    render() {
        return <Child onChildClick={this.handleParentOnClick}>click me</Child>;
    }

    handleParentOnClick(text) {
        this.props.onParentClick(12345);
    }
}

class App extends React.Component {
    render() {
        return <Parent onParentClick={(num) => console.log(num)} />;
    }
}

我很难确定测试Parent组件的正确方法ChildApp一个都没有问题,但Parent...

我的意思是,如何测试该Child组件上的单击是否会在Parent没有以下情况的情况下调用click回调:

  1. ...渲染ChildParent应该作为浅层渲染单独进行测试。Child还将单独进行测试,如果我执行了挂载渲染,则基本上是Child两次测试click回调
  2. ...直接调用handleParentOnClickParent实例。我不应该依赖Parent于此的确切实现如果更改回调函数的名称,则测试将中断,并且很可能是误报。

还有第三种选择吗?

安德烈·贝巴拉斯基(Andrei Baibaratsky)

在测试时Parent,您可以执行以下操作:

import { shallow } from 'enzyme';
import { stub } from 'sinon';

describe('<Parent/>', () => {
  it('should handle a child click', () => {
    const onParentClick = stub();
    const wrapper = shallow(<Parent onParentClick={onParentClick} />);
    wrapper.find("Child").prop('onChildClick')('foo');
    expect(onParentClick.callCount).to.be.equal(1);
    // You can also check if the 'foo' argument was passed to onParentClick
  });
});

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

测试React中的嵌套组件回调

React Hook - 无法在子组件 onComplete 回调中调用父组件调度

如何在 React Native 中的 Tab View 回滚时从父组件调用子组件方法?

React - 无法使用`this`在回调函数中调用组件方法

React-ClickDrag子组件回调

如何使用 Cypress 对在 React 组件上调用的回调函数进行单元测试

如何测试withRouter包装的React组件的回调?

如何在同一组件内的回调中在ReactJS中调用函数?

在单元测试之前,如何等待异步调用在组件的安装回调中完成?

如何在回调中访问Vue组件数据

如何在React中从父组件调用子组件的方法

使用 setstate 调用父回调时,react 子组件无法呈现

如何在 Meteor.call 回调中更改 React 组件状态?

如何在 React 样式组件的模板文字中定义的单个回调中使用多个道具

未调用外部(npm打包)组件的React setState回调

如何使输入组件验证输入并调用指定的回调?

如何从 angular 2 + (razorpay) 的回调内部调用组件函数?

回调函数中的 React 组件未调用且未引发任何错误

React-未在回调中设置props表达式的子组件数组

在 React Jest/Enzyme 中测试子组件的条件渲染

React中的回调参数如何从子组件传递到父组件?

如何在React子组件中调用继承的函数

React-将组件保存在ref回调中

React-替代功能组件中的setState回调?

React Functional 组件中按钮 onClick 上的回调函数

在React组件中处理多个onChange回调

在React-Router路由组件中作为回调的动作

React:从回调中设置功能组件的状态

在 react 组件中运行 lib 回调函数