我想测试以下使用React.createRef
api的类。
快速搜索没有发现任何执行此操作的示例。有人成功吗?我将如何嘲笑裁判?
理想情况下,我想使用shallow
。
class Main extends React.Component<Props, State> {
constructor(props) {
super(props);
this.state = {
contentY: 0,
};
this.domRef = React.createRef();
}
componentDidMount() {
window.addEventListener('scroll', this.handleScroll);
handleScroll();
}
componentWillUnmount() {
window.removeEventListener('scroll', this.handleScroll);
}
handleScroll = () => {
const el = this.domRef.current;
const contentY = el.offsetTop;
this.setState({ contentY });
};
render() {
return (
<Wrapper innerRef={this.domRef}>
<MainRender contentY={this.state.contentY} {...this.props} />
</Wrapper>
);
}
}
更新资料
所以我可以使用回调引用进行测试,如下所示
setRef = (ref) => {
this.domRef = ref;
}
handleScroll = () => {
const el = this.domRef;
if (el) {
const contentY = el.offsetTop;
this.setState({ contentY });
}
};
render() {
return (
<Wrapper ref={this.setRef}>
<MainRender contentY={this.state.contentY} {...this.props} />
</Wrapper>
);
}
}
然后测试类似
it("adds an event listener and sets currentY to offsetTop", () => {
window.addEventListener = jest.fn();
const component = shallow(<ScrollLis />)
const mockRef = { offsetTop: 100 };
component.instance().setRef(mockRef);
component.instance().componentDidMount();
expect(window.addEventListener).toBeCalled();
component.update();
const mainRender = component.find(MainRender);
expect(mainRender.props().contentY).toBe(mockRef.offsetTop);
});
没有特定的例程可以测试参考。引用只是带有current
键的对象。
如果它是在早期访问的componentDidMount
,则需要禁用生命周期挂钩进行测试。应该测试组件最初是否具有引用,然后可以对其进行模拟
const wrapper = shallow(<Comp/>, { disableLifecycleMethods: true });
expect(wrapper.instance().domRef).toEqual({ current: null });
wrapper.instance().domRef.current = mockRef;
wrapper.instance().componentDidMount();
由于ref作为prop传递给另一个组件,因此可以测试是否为它提供了正确的ref:
expect(wrapper.find(Wrapper).dive().props().innerRef).toBe(wrapper.instance().domRef);
然后在Wrapper
测试中可以测试给ref current
键分配了正确的对象。
问题内容: 我正在使用酶+摩卡+柴来测试我的react-redux项目。酶提供浅浅以测试组件的行为。但是我没有找到测试路由器的方法。我正在使用如下的react- router: 我要测试此路由参考组件。如何在reactjs项目中对其进行测试? 编辑1 我正在使用作为路由器框架。 问题答案: 您可以将路由器包装在组件中以对其进行测试。 Routes.jsx index.js 然后,您必须对组件进行浅
我正在尝试使用{mount}方法对我的React类组件进行单元测试。当我尝试访问class变量(使用这个关键字)时,运行测试会给出一个未定义的错误。下面的示例,其中调用后,此.DataSource的计算结果为未定义
我有一个使用redux表单的注册React组件,我的onSubmit基本上发送一个异步操作。我正在尝试使用Ezyme和Jest测试我的组件,方法是向我的分派添加一个间谍,并检查是否在模拟表单提交时调用分派。然而,我的测试失败了。 这是我的注册redux表单组件: 这是我的测试: 我的测试失败,出现以下错误:expect(jest.fn())。ToHaveBeenCall()预期已调用模拟函数。 请
我有以下组成部分: 现在我正在尝试编写一个单元测试来检查if条件(根据.to属性返回IndexLink或Link): 但我似乎无法测试函数的确切jsx返回,因为当我使用控制台时。记录我得到的其中一个返回: {$$typeof':Symbol(react.element),type:'div',key:'/',ref:null,props:{className:'navbar link contai
问题内容: 我正在尝试测试React组件的样式属性。在测试中获取样式参数的最佳方法是什么? 目前,我最好的选择是测试HTML是否包含字符串,但是我认为有一个更好的选择。 案件: 要测试的组件是: 问题答案: 您可以使用此方法。它返回ReactElement。
当我运行测试时,代码中出现了“意外的令牌错误: 错误被抛出到“( 我写过笑话测试。这是我第一次使用酶和react编写测试用例。所以我不熟悉这个设置。我已经安装了:babel jest、react dom、babel插件转换导出扩展、enzyme-adapter-react-16、react测试渲染器、@babel/preset env和@babel/core package.json: jest.