Reactjs 在Jest/Ezyme中测试嵌套组件时找不到函数或节点

Reactjs 在Jest/Ezyme中测试嵌套组件时找不到函数或节点,reactjs,jestjs,enzyme,Reactjs,Jestjs,Enzyme,我正在尝试测试嵌套在其他两个组件中的特定组件: <Router> <Provider store={store}> <Howitworks /> </Provider> </Router> 不幸的是,关于在测试环境中访问嵌套组件中的函数的文档非常有限,因此任何帮助都非常有用 编辑: 更新的测试套件: test("should call onTaskerClick", () => {

我正在尝试测试嵌套在其他两个组件中的特定组件:

<Router>
  <Provider store={store}>
    <Howitworks />
  </Provider>
</Router>
不幸的是,关于在测试环境中访问嵌套组件中的函数的文档非常有限,因此任何帮助都非常有用

编辑:

更新的测试套件:

 test("should call onTaskerClick", () => {

   const wrapper = mount(
     <Router>
       <Provider store={store}>
         <Howitworks />
       </Provider>
     </Router>
   );
   const spy = 
 jest.spyOn(wrapper.find(Howitworks.WrappedComponent).instance(), "onTaskerClick");
   wrapper.find("#pills-tasker-tab.nav-link.tasklink").at(0).simulate("click");

   expect(spy).toHaveBeenCalled();
 });

connect
返回不从原始组件继承的高阶组件,这在React中很常见

为了使
onTaskerClick
能够在原型上进行监视,它应该是原型而不是实例(箭头)方法。原始组件类可以是单独命名的导出:

export class Howitworks {
  onTaskerClick() {...}
  ...
}

export default connect(...)(Howitworks);
也可以在连接的组件上访问它

由于在组件实例化时不调用
onTaskerClick
,因此无需监视原型,在实例上执行此操作更容易,这并不限制监视原型方法:

   const wrapper = mount(...);
   const origComp = wrapper.find(Howitworks.WrappedComponent).instance();
   const spy = jest.spyOn(origComp, "onTaskerClick");
   origComp.forceUpdate();
   // trigger click

感谢您的回复,我仍然收到一个类型错误:无法读取我上次使用的nullYea的属性“onTaskerClick”。我应该使用什么解决方案,因为onTaskerClick是Howitworks中的一个箭头函数。我尝试使用WrapperComponent,但仍然收到了大量调用:0当您尝试使用Howitworks监视箭头时。prototype错误,只有最后一个有机会工作。因为它不会导致可能表明间谍有问题的错误,所以我希望它能工作。请使用完整组件和您当前的测试尝试更新问题。不清楚你这方面出了什么问题。我没有使用原型。请查看我更新的测试套件。我也无法发布完整的组件,但它是一个类组件,其中箭头函数onTaskerClick将状态中的“step”值更改为“tasker”。我还在op中添加了mapStateToProps函数,这可能会提供更多信息。
 test("should call onTaskerClick", () => {

   const wrapper = mount(
     <Router>
       <Provider store={store}>
         <Howitworks />
       </Provider>
     </Router>
   );
   const spy = 
 jest.spyOn(wrapper.find(Howitworks.WrappedComponent).instance(), "onTaskerClick");
   wrapper.find("#pills-tasker-tab.nav-link.tasklink").at(0).simulate("click");

   expect(spy).toHaveBeenCalled();
 });
 let mapStateToProps = (state) => ({});

 export default connect(mapStateToProps, { onNotifyClick })(Howitworks);
export class Howitworks {
  onTaskerClick() {...}
  ...
}

export default connect(...)(Howitworks);
   const wrapper = mount(...);
   const origComp = wrapper.find(Howitworks.WrappedComponent).instance();
   const spy = jest.spyOn(origComp, "onTaskerClick");
   origComp.forceUpdate();
   // trigger click