Unit testing React-如何模拟子组件并让它们回调父组件?
我想对一个有2个子元素的组件进行单元测试 被测组件负责呈现第一个子组件。然后,当用户完成与第一个子级的交互时,第一个子级将通过onComplete回调回调来回调父级 回调父组件时,它将使用状态和条件渲染来隐藏第一个子组件并显示第二个子组件 我希望我的例子有意义。设想一个页面,其中用户与组件交互(即单击、输入文本等)。然后它消失,另一个组件出现 我想将父组件与子组件分开进行单元测试。理想情况下,我会嘲笑孩子们。但我不知道如何让孩子的mock在我的测试中回调父母 我目前的测试使用真实的孩子。这意味着当一个孩子改变时,我必须改变父测试。(即,我单击子组件上的某些文本以触发对父测试中父组件的回调。如果我想更改子组件上的文本,我必须更改父组件的测试以单击更改的文本)。(这显然是一种巨大的痛苦) 下面是我尝试测试的一个示例:Unit testing React-如何模拟子组件并让它们回调父组件?,unit-testing,reactjs,mocking,tdd,Unit Testing,Reactjs,Mocking,Tdd,我想对一个有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的逻辑)
希望这是有意义的
期待你的来信