Unit testing React-如何模拟子组件并让它们回调父组件?

Unit testing React-如何模拟子组件并让它们回调父组件?,unit-testing,reactjs,mocking,tdd,Unit Testing,Reactjs,Mocking,Tdd,我想对一个有2个子元素的组件进行单元测试 被测组件负责呈现第一个子组件。然后,当用户完成与第一个子级的交互时,第一个子级将通过onComplete回调回调来回调父级 回调父组件时,它将使用状态和条件渲染来隐藏第一个子组件并显示第二个子组件 我希望我的例子有意义。设想一个页面,其中用户与组件交互(即单击、输入文本等)。然后它消失,另一个组件出现 我想将父组件与子组件分开进行单元测试。理想情况下,我会嘲笑孩子们。但我不知道如何让孩子的mock在我的测试中回调父母 我目前的测试使用真实的孩子。这意味着

我想对一个有2个子元素的组件进行单元测试

被测组件负责呈现第一个子组件。然后,当用户完成与第一个子级的交互时,第一个子级将通过onComplete回调回调来回调父级

回调父组件时,它将使用状态和条件渲染来隐藏第一个子组件并显示第二个子组件

我希望我的例子有意义。设想一个页面,其中用户与组件交互(即单击、输入文本等)。然后它消失,另一个组件出现

我想将父组件与子组件分开进行单元测试。理想情况下,我会嘲笑孩子们。但我不知道如何让孩子的mock在我的测试中回调父母

我目前的测试使用真实的孩子。这意味着当一个孩子改变时,我必须改变父测试。(即,我单击子组件上的某些文本以触发对父测试中父组件的回调。如果我想更改子组件上的文本,我必须更改父组件的测试以单击更改的文本)。(这显然是一种巨大的痛苦)

下面是我尝试测试的一个示例:

export default class ExampleParentComponent extends React.Component {
  constructor() {
    super();
    this.state = {
      part1Complete: false
    }
  }

  render() {
    let part1, part2;

    if(!this.state.part1Complete) {
      part1 = <Part1 onComplete={this._handlePart1Complete.bind(this)} />
    } else {
      part2 = <Part2 />
    }

    return (
      <div>
        {part1}
        {part2}
      </div>
    );
  }

  _handlePart1Complete() {
    this.setState({ part1Complete: true });
  }
}
导出默认类ExampleParentComponent扩展React.Component{
构造函数(){
超级();
此.state={
第1部分完成:错误
}
}
render(){
让第1部分,第2部分;
如果(!this.state.part1Complete){
第1部分=
}否则{
第2部分=
}
返回(
{part1}
{part2}
);
}
_HandlePart1完成(){
this.setState({part1Complete:true});
}
}
另一个例子是:

第一个子代调用父代并返回结果

根据结果的值,父级可能会在下一步渲染part2或part3。 我们如何触发模拟子对象上的回调,并使其返回具有特定结果的回调(因此我们可以测试呈现part2或part3的逻辑)

希望这是有意义的

期待你的来信