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