首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >React/JestJS/Enzyme:如何测试ref函数?

React/JestJS/Enzyme:如何测试ref函数?
EN

Stack Overflow用户
提问于 2018-01-04 12:02:15
回答 2查看 23.4K关注 0票数 11

我正在使用Jest和酶对这个非常简单的组件render()运行单元测试

代码语言:javascript
复制
render() {
  return (<Input
    id='foo'
    ref={input => { this.refInput = input }}
  />)
}

it('should render Input', () => {
  wrapper = shallow(<Component />)
  expect(wrapper.find(Input)).toHaveLength(1)
})

我还使用了Jest的覆盖范围选项,我看到,这行代码

代码语言:javascript
复制
ref={input => { this.refInput = input }}

不在我的测试范围内。我必须做什么才能获得这个示例组件的完整单元测试?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-01-04 12:35:04

引用被附加到组件的一个实例上,因此您必须使用mount来获取组件的一个实例。

要测试ref,请添加以下行

代码语言:javascript
复制
expect(wrapper.instance().refInput).toBeTruthy();

最终结果:

代码语言:javascript
复制
render() {
  return (<Input
    id='foo'
    ref={input => { this.refInput = input }}
  />)
}

it('should render Input', () => {
  const wrapper = mount(<Component />);
  expect(wrapper.find(Input)).toHaveLength(1)
  expect(wrapper.instance().refInput).toBeTruthy();
})
票数 14
EN

Stack Overflow用户

发布于 2020-06-08 21:03:08

我这样解决了这个问题:

代码语言:javascript
复制
const ref = React.createRef();
const props = { register: jest.fn(params => ref), label: "label text", ...params };
let wrapper = mount(
    <ThemeProvider theme={theme}>
        <Input {...props} />
    </ThemeProvider>
);
expect(wrapper.find(Entity).getElement().ref).toBe(ref);

我在输入中有实体组件,它接收ref函数。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48088489

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档